この機能を与えられて、私は color をランダムな色生成器と取り替えたい。
document.overlay = GPolyline.fromEncoded({
color: "#0000FF",
weight: 10,
points: encoded_points,
zoomFactor: 32,
levels: encoded_levels,
numLevels: 4
});
どうすればいいの?
"#0000FF"
の代わりにgetRandomColor()
を使用してください。
function getRandomColor() {
var letters = '0123456789ABCDEF';
var color = '#';
for (var i = 0; i < 6; i++) {
color += letters[Math.floor(Math.random() * 16)];
}
return color;
}
function setRandomColor() {
$("#colorpad").css("background-color", getRandomColor());
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="colorpad" style="width:300px;height:300px;background-color:#000">
</div>
<button onclick="setRandomColor()">Random Color</button>
これよりも速くなったり短くなったりすることはありません。
"#"+((1<<24)*Math.random()|0).toString(16)
チャレンジ!
これはこの問題のもう一つの見方です。
私の目標は、鮮やかではっきりとした色を作成することでした。色がはっきりしていることを確認するために、ランダムジェネレータを使用せずに、Rainbowから「均等間隔」の色を選択します。
これは、Googleマップで最適な「一意性」を持つポップアウトマーカーを作成するのに最適です(つまり、2つのマーカーが同じ色を持つことはありません)。
function Rainbow(numOfSteps, step) {
// This function generates vibrant, "evenly spaced" colours (i.e. no clustering). This is ideal for creating easily distinguishable vibrant markers in Google Maps and other apps.
// Adam Cole, 2011-Sept-14
// HSV to RBG adapted from: http://mjijackson.com/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript
var r, g, b;
var h = step / numOfSteps;
var i = ~~(h * 6);
var f = h * 6 - i;
var q = 1 - f;
switch(i % 6){
case 0: r = 1; g = f; b = 0; break;
case 1: r = q; g = 1; b = 0; break;
case 2: r = 0; g = 1; b = f; break;
case 3: r = 0; g = q; b = 1; break;
case 4: r = f; g = 0; b = 1; break;
case 5: r = 1; g = 0; b = q; break;
}
var c = "#" + ("00" + (~ ~(r * 255)).toString(16)).slice(-2) + ("00" + (~ ~(g * 255)).toString(16)).slice(-2) + ("00" + (~ ~(b * 255)).toString(16)).slice(-2);
return (c);
}
これが実際にどのように見えるのかを見たい場合は、 http://blog.adamcole.ca/2011/11/simple-javascript-Rainbow-color.html を参照してください。
誰がそれを打つことができますか?
'#'+Math.random().toString(16).substr(-6);
常に動作することが保証されています: http://jsbin.com/OjELIfo/2/edit
@eterpsのコメントに基づいて、ランダムカラーの16進表現が非常に短い場合、上記のコードはより短い文字列を生成することができます(0.730224609375
=> 0.baf
)
このコードはすべての場合に機能するはずです。
function makeRandomColor(){
var c = '';
while (c.length < 7) {
c += (Math.random()).toString(16).substr(-6).substr(-1)
}
return '#'+c;
}
16進文字のハッシュは必要ありません。 JavaScriptはこれを自分で行うことができます。
function get_random_color() {
function c() {
var hex = Math.floor(Math.random()*256).toString(16);
return ("0"+String(hex)).substr(-2); // pad with zero
}
return "#"+c()+c()+c();
}
明るさを制御したランダムカラー生成
function getRandColor(brightness){
// Six levels of brightness from 0 to 5, 0 being the darkest
var rgb = [Math.random() * 256, Math.random() * 256, Math.random() * 256];
var mix = [brightness*51, brightness*51, brightness*51]; //51 => 255/5
var mixedrgb = [rgb[0] + mix[0], rgb[1] + mix[1], rgb[2] + mix[2]].map(function(x){ return Math.round(x/2.0)})
return "rgb(" + mixedrgb.join(",") + ")";
}
私はこれが好きです:'#' + (Math.random().toString(16) + "000000").substring(2,8)
また、すべての優れたブラウザで利用可能なHSLを使用することができます( http://caniuse.com/#feat=css3-colors )
function randomHsl() {
return 'hsla(' + (Math.random() * 360) + ', 100%, 50%, 1)';
}
これはあなたに明るい色だけを与えるでしょう、あなたは明るさ、彩度とアルファで遊べます。
// es6
const randomHsl = () => `hsla(${Math.random() * 360}, 100%, 50%, 1)`
'#'+Math.random().toString(16).slice(-3) // three-numbers format aka #f3c
'#'+Math.random().toString(16).slice(-6) // six-number format aka #abc123
Paul Irish がJavaScriptで作成したRandom Hex Color Code Generatorについての記事は非常に素晴らしいものです。つかいます:
'#'+Math.floor(Math.random()*16777215).toString(16);
これがソースリンクです。
http://www.paulirish.com/2009/random-hex-color-code-snippets/ /
これが@Anatoliyが提供する解決策のひねりです。
私は(背景のために)明るい色だけを生成する必要があったので、私は3文字(#AAA)フォーマットで行きました:
function get_random_color() {
var letters = 'ABCDE'.split('');
var color = '#';
for (var i=0; i<3; i++ ) {
color += letters[Math.floor(Math.random() * letters.length)];
}
return color;
}
これは、Google検索を使用して非常に簡単に見つけることができます。
function random_color(format)
{
var rint = Math.round(0xffffff * Math.random());
switch(format)
{
case 'hex':
return ('#0' + rint.toString(16)).replace(/^#0([0-9a-f]{6})$/i, '#$1');
break;
case 'rgb':
return 'rgb(' + (rint >> 16) + ',' + (rint >> 8 & 255) + ',' + (rint & 255) + ')';
break;
default:
return rint;
break;
}
}
更新版:
function random_color( format ){
var rint = Math.floor( 0x100000000 * Math.random());
switch( format ){
case 'hex':
return '#' + ('00000' + rint.toString(16)).slice(-6).toUpperCase();
case 'hexa':
return '#' + ('0000000' + rint.toString(16)).slice(-8).toUpperCase();
case 'rgb':
return 'rgb(' + (rint & 255) + ',' + (rint >> 8 & 255) + ',' + (rint >> 16 & 255) + ')';
case 'rgba':
return 'rgba(' + (rint & 255) + ',' + (rint >> 8 & 255) + ',' + (rint >> 16 & 255) + ',' + (rint >> 24 & 255)/255 + ')';
default:
return rint;
}
}
あなたが私のような、16進法などについては無知な人であれば、これはもっと直観的かもしれません。
function r() { return Math.floor(Math.random() * 255) }
var color = 'rgb(' + r() + "," + r() + "," + r() + ')';
あなたは'rgb(255, 123, 220)'
のような文字列で終わる必要があるだけです。
var color = "#";
for (k = 0; k < 3; k++) {
color += ("0" + (Math.random()*256|0).toString(16)).substr(-2);
}
これがどのように機能するかの内訳:
Math.random()*256
は、0から256まで(0から255まで)のランダムな(浮動小数点)数を取得します
結果の例:116.15200161933899
|0
を追加すると、小数点以下はすべて削除されます。
例:116.15200161933899 - > 116
.toString(16)
を使用すると、この数は16進数(基数16)に変換されます。
例:116 - > 74
他の例:228 - > e4
"0"
を追加すると、ゼロで埋められます。これは、サブストリングを取得するときに重要になります。これは、最終結果には各色に2文字が必要なためです。
例:74 - > 074
他の例:8 - > 08
.substr(-2)
は最後の2文字だけを取得します。
例:074 - > 74
別の例:08 - > 08("0"
を追加しなかった場合、これは "08"ではなく "8"を生成したはずです)
for
ループはこのループを3回実行し、各結果をカラー文字列に追加して、次のようなものを生成します。#7408e4
正確なサイズへのパッドとの短い答え
'#'+((1<<24)*(Math.random()+1)|0).toString(16).substr(1)
それで、ここでのすべての答えは良いのですが、出力をもう少し制御したいと思いました。例えば、明るく鮮やかな色が洗い流されないようにしながら、白に近い色合いを防ぎたいのです。
function generateColor(ranges) {
if (!ranges) {
ranges = [
[150,256],
[0, 190],
[0, 30]
];
}
var g = function() {
//select random range and remove
var range = ranges.splice(Math.floor(Math.random()*ranges.length), 1)[0];
//pick a random number from within the range
return Math.floor(Math.random() * (range[1] - range[0])) + range[0];
}
return "rgb(" + g() + "," + g() + "," + g() +")";
};
だから今私はからrgb値を選ぶために3つの任意の範囲を指定することができます。引数なしでそれを呼び出して、かつてはっきりした支配的な色合いで通常は非常に鮮やかな色を生成する私のデフォルトセットを取得することができます、またはあなたはあなた自身の範囲の配列を供給することができます。
`#${crypto.getRandomValues(new Uint32Array(1))[0].toString(16).padStart(8, 0).slice(-6)}`
`#${crypto.getRandomValues(new Uint32Array(1))[0].toString(16).padStart(8, 0)}`
トップアンサーのトップ投票のコメントは、Martin Ankerlのアプローチが乱数の16進数より優れていることを示唆しています、そして、私はAnkerlの方法論を改善していませんでしたが、私はうまくJavaScriptに翻訳しました。私はこのすでにメガサイズのSOスレッドへの追加の回答を投稿しようと思いました。なぜなら一番上の回答にはAnkerlのロジックのJS実装を持つGistへのリンクがあり、そのリンクが壊れているからです。評判が良ければ、私が作成したjsbinリンクにコメントするだけです。
// adapted from
// http://jsfiddle.net/Mottie/xcqpF/1/light/
const rgb2hex = (rgb) => {
return (rgb && rgb.length === 3) ? "#" +
("0" + parseInt(rgb[0],10).toString(16)).slice(-2) +
("0" + parseInt(rgb[1],10).toString(16)).slice(-2) +
("0" + parseInt(rgb[2],10).toString(16)).slice(-2) : '';
}
// next two methods converted from Ruby to JS
// soured from http://martin.ankerl.com/2009/12/09/how-to-create-random-colors-programmatically/
// # HSV values in [0..1[
// # returns [r, g, b] values from 0 to 255
const hsv_to_rgb = (h, s, v) => {
const h_i = Math.floor(h*6)
const f = h*6 - h_i
const p = v * (1 - s)
const q = v * (1 - (f * s))
const t = v * (1 - (1 - f) * s)
let r, g, b
switch(h_i){
case(0):
[r, g, b] = [v, t, p]
break
case(1):
[r, g, b] = [q, v, p]
break
case(2):
[r, g, b] = [p, v, t]
break
case(3):
[r, g, b] = [p, q, v]
break
case(4):
[r, g, b] = [t, p, v]
break
case(5):
[r, g, b] = [v, p, q]
break
}
return [Math.floor(r * 256), Math.floor(g * 256), Math.floor(b * 256)]
}
// # use golden ratio
const golden_ratio_conjugate = 0.618033988749895
let h = Math.random() // # use random start value
const gen_hex = (numberOfColors) => {
const colorArray = []
while (numberOfColors > 0) {
h += golden_ratio_conjugate
h %= 1
colorArray.Push(rgb2hex(hsv_to_rgb(h, 0.99, 0.99)))
numberOfColors -= 1
}
console.log(colorArray)
return colorArray
}
gen_hex(100)
Array.prototype.reduce
はとてもきれいにします。
["r","g","b"].reduce(function(res) {
return res + ("0"+~~(Math.random()*256).toString(16)).slice(-2)
}, "#")
古いブラウザ用のシムが必要です。
さらに別のランダムカラージェネレータ:
var randomColor;
randomColor = Math.random() * 0x1000000; // 0 < randomColor < 0x1000000 (randomColor is a float)
randomColor = Math.floor(randomColor); // 0 < randomColor <= 0xFFFFFF (randomColor is an integer)
randomColor = randomColor.toString(16); // hex representation randomColor
randomColor = ("000000" + randomColor).slice(-6); // leading zeros added
randomColor = "#" + randomColor; // # added
あなたはこの単純な機能を使うことができます
function getRandomColor(){
var color = "#" + (Math.random() * 0xFFFFFF << 0).toString(16);
return color;
}
distinct-colors を使用してください。
これは 視覚的 個別の色のパレットを生成します。
distinct-colorsは高度に設定可能です:
function get_random_color() {
return "#" + (Math.round(Math.random() * 0XFFFFFF)).toString(16);
}
これがランダムな16進コードジェネレータの2つのバージョンです。
/* Slowest but shortest. */
"#000000".replace(/0/g,function(){return (~~(Math.random()*16)).toString(16);});
/* Good performance with small size. */
"#"+(function(a,b){while(a--){b+=""+(~~(Math.random()*16)).toString(16);} return b;})(6,"");
/* Remy Sharp provided one that's the fastest but a little bit too long */
(function(h){return '#000000'.substr(0,7-h.length)+h})((~~(Math.random()*(1<<24))).toString(16))
この機能は、2つの点で他の答えを超えています。
HSVコーン内で、20回の試行のうちどの色が他の色との距離が最も遠いかを判断することによって、できるだけ明確な色を生成しようとします。
色相、彩度、または値の範囲を制限することはできますが、それでもその範囲内でできるだけ明確な色を選択しようとします。
それはそれほど効率的ではありませんが、合理的な値(誰でも簡単に100色を選ぶことができますか?)のためにそれは十分に速いです。
/**
* Generates a random palette of HSV colors. Attempts to pick colors
* that are as distinct as possible within the desired HSV range.
*
* @param {number} [options.numColors=10] - the number of colors to generate
* @param {number[]} [options.hRange=[0,1]] - the maximum range for generated hue
* @param {number[]} [options.sRange=[0,1]] - the maximum range for generated saturation
* @param {number[]} [options.vRange=[0,1]] - the maximum range for generated value
* @param {number[][]}[options.exclude=[[0,0,0],[0,0,1]]] - colors to exclude
*
* @returns {number[][]} an array of HSV colors (each HSV color
* is a [hue, saturation, value] array)
*/
function randomHSVPalette(options) {
function random(min, max) {
return min + Math.random() * (max - min);
}
function HSVtoXYZ(hsv) {
var h = hsv[0];
var s = hsv[1];
var v = hsv[2];
var angle = h * Math.PI * 2;
return [Math.sin(angle) * s * v,
Math.cos(angle) * s * v,
v];
}
function distSq(a, b) {
var dx = a[0] - b[0];
var dy = a[1] - b[1];
var dz = a[2] - b[2];
return dx * dx + dy * dy + dz * dz;
}
if (!options) {
options = {};
}
var numColors = options.numColors || 10;
var hRange = options.hRange || [0, 1];
var sRange = options.sRange || [0, 1];
var vRange = options.vRange || [0, 1];
var exclude = options.exclude || [[0, 0, 0], [0, 0, 1]];
var points = exclude.map(HSVtoXYZ);
var result = [];
while (result.length < numColors) {
var bestHSV;
var bestXYZ;
var bestDist = 0;
for (var i = 0; i < 20; i++) {
var hsv = [random(hRange[0], hRange[1]), random(sRange[0], sRange[1]), random(vRange[0], vRange[1])];
var xyz = HSVtoXYZ(hsv);
var minDist = 10;
points.forEach(function(point) {
minDist = Math.min(minDist, distSq(xyz, point));
});
if (minDist > bestDist) {
bestHSV = hsv;
bestXYZ = xyz;
bestDist = minDist;
}
}
points.Push(bestXYZ);
result.Push(bestHSV);
}
return result;
}
function HSVtoRGB(hsv) {
var h = hsv[0];
var s = hsv[1];
var v = hsv[2];
var i = ~~(h * 6);
var f = h * 6 - i;
var p = v * (1 - s);
var q = v * (1 - f * s);
var t = v * (1 - (1 - f) * s);
v = ~~(255 * v);
p = ~~(255 * p);
q = ~~(255 * q);
t = ~~(255 * t);
switch (i % 6) {
case 0: return [v, t, p];
case 1: return [q, v, p];
case 2: return [p, v, t];
case 3: return [p, q, v];
case 4: return [t, p, v];
case 5: return [v, p, q];
}
}
function RGBtoCSS(rgb) {
var r = rgb[0];
var g = rgb[1];
var b = rgb[2];
var rgb = (r << 16) + (g << 8) + b;
return '#' + ('000000' + rgb.toString(16)).slice(-6);
}
これまでの簡単な方法のほとんどすべてが無効な16進コード(5桁)を生成しています。私はその問題がないだけで同じようなテクニックに出会いました ここ :
"#"+("000"+(Math.random()*(1<<24)|0).toString(16)).substr(-6)
コンソールでこれを試してください:
for(i = 0; i < 200; i++) {
console.log("#" + ("000" + (Math.random()*(1<<24)|0).toString(16)).substr(-6));
}
これを実現する方法はたくさんあります。これが私がしたことです:
6つのランダムな16進数(0-F)を生成します
function randColor() {
for (var i=0, col=''; i<6; i++) {
col += (Math.random()*16|0).toString(16);
}
return '#'+col;
}
非常に短いワンライナー
'#'+Math.random().toString(16).slice(-6)
個々のRGB成分を生成する(00-FF)
function randColor2() {
var r = ('0'+(Math.random()*256|0).toString(16)).slice(-2),
g = ('0'+(Math.random()*256|0).toString(16)).slice(-2),
b = ('0'+(Math.random()*256|0).toString(16)).slice(-2);
return '#' +r+g+b;
}
オーバーエンジニアリングされた16進文字列(3つの出力をまとめて色を形成する)
function randColor3() {
var str = Math.random().toString(16) + Math.random().toString(16),
sg = str.replace(/0./g,'').match(/.{1,6}/g),
col = parseInt(sg[0], 16) ^
parseInt(sg[1], 16) ^
parseInt(sg[2], 16);
return '#' + ("000000" + col.toString(16)).slice(-6);
}
私のバージョン:
function RandomColor() {
var hex = (Math.round(Math.random()*0xffffff)).toString(16);
while (hex.length < 6) hex = "0" + hex;
return hex;
}
colorchain.js を使用すると、色相が異なる一連の色を生成できます。
最も簡単な答えはまだわかりませんでした。
これはランダムカラーを生成するための最も効率的な方法です:
var color = "#" + Math.floor(Math.random() * 16777215).toString(16);
それが何をするのか説明した:
このメソッドは、乱数を取得し、16進数の文字列に変換してから、その一部を抽出して、ランダムな16進数を取得します。
function randomColor() {
return "#" + Math.random().toString(16).slice(2,8);
}
できるからといって、最小16進コードと最大16進コードを無作為化する判読できない断片を作成しました。
function a(f, s){
if(!s || !s.length > 1) return "";
var c = Math.floor(Math.random()*(parseInt("0x" + s.substr(0,2))-parseInt("0x" + f.substr(0,2))+1)+parseInt("0x" + f.substr(0,2))).toString(16);
return (Array(3 - c.length).join("0")) + c + a(f.substr(2,f.length),s.substr(2,s.length));
}
a("990099","ff00ff")
→ランダム化される可能性があります→b5009e
これはペアで行われるので、a("12","f2")
→はランダム化→8f
となります。しかし、それは'f2'
より上には行きません。
var color = "#" + a("11","22") + a("33","44") + a("55","66");
それはと同じです:
var color = "#" + a("113355","224466")
しかし遅くなります。
アプローチをより鮮明にするための少し強化されたワンライナー
'#' + Math.round((0x1000000 + 0xffffff * Math.random())).toString(16).slice(1)
これを試すことができます。それは絶対にランダムで快適なカラージェネレータです)
var Color = '#';
var myElement;
for (var i = 0; i < 6; i++) {
function Random1(from, to) {
return Math.floor((Math.random() * (70 - 65 + 1)) + 65);
}
function Random2(from, to) {
return Math.floor((Math.random() * (1 - 0 + 1)) + 0);
}
function Random3(from, to) {
return Math.floor((Math.random() * (9 - 0 + 1)) + 0);
}
if (Random2()) {
myElement = Random3();
}
else {
myElement = String.fromCharCode(Random1());
}
Color += myElement;
}
多くの答えがMath.random()
への必要以上の呼び出しをします。あるいは、その数字の16進数表現が6文字になることを願っています。
まずランダムフロートを乗算して[0, 0xffffff + 1)
の範囲になるようにします。これで、私たちの数は0xRRRRRR
という形になり、いくつかの変更があります。これは、24の有効ビットを持つ数です。一度に4ビットを読み取り、その乱数[0, 15]
を使用して、それをlookup
内の対応する16進文字に変換します。
function randomColor() {
var lookup = "0123456789abcdef";
var seed = Math.random() * 0x1000000;
return (
"#" +
lookup[(seed & 0xf00000) >> 20] +
lookup[(seed & 0x0f0000) >> 16] +
lookup[(seed & 0x00f000) >> 12] +
lookup[(seed & 0x000f00) >> 8] +
lookup[(seed & 0x0000f0) >> 4] +
lookup[seed & 0x00000f]
);
};
私は最初の回答が最も簡潔で有用であると思いますが、私はちょうど初心者にとって理解しやすいものを書いただけです。
function randomHexColor(){
var hexColor=[]; //new Array()
hexColor[0] = "#"; //first value of array needs to be hash tag for hex color val, could also prepend this later
for (i = 1; i < 7; i++)
{
var x = Math.floor((Math.random()*16)); //Tricky: Hex has 16 numbers, but 0 is one of them
if (x >=10 && x <= 15) //hex:0123456789ABCDEF, this takes care of last 6
{
switch(x)
{
case 10: x="a"
break;
case 11: x="b"
break;
case 12: x="c"
break;
case 13: x="d"
break;
case 14: x="e"
break;
case 15: x="f"
break;
}
}
hexColor[i] = x;
}
var cString = hexColor.join(""); //this argument for join method ensures there will be no separation with a comma
return cString;
}
function getRandomColor()
{
var color = "#";
for (var i = 0; i < 3; i++)
{
var part = Math.round(Math.random() * 255).toString(16);
color += (part.length > 1) ? part : "0" + part;
}
return color;
}
正規表現(常に有効な16進数の6桁の色を返す)
"#xxxxxx".replace(/x/g, y=>(Math.random()*16|0).toString(16))
let c= "#xxxxxx".replace(/x/g, y=>(Math.random()*16|0).toString(16));
console.log(c);
document.body.style.background=c
このコード(Mohsen's)は#fcfc80のような色は生成できません。
'#'+Math.random().toString(16).substr(-6);
Nicolas Buduroiのものは#008a80を生成できません。
'#' + (Math.random().toString(16) + "000000").substring(2,8)
このコードは(#abcdeのような)多くの違法な色を生成します。
'#'+Math.floor(Math.random()*16777215).toString(16);
そして私は使い続けます
"#"+((Math.random()+2)*16777216|0).toString(16).slice(1)
この行はあなたのために色をランダムに変えるべきです:
setInterval(function(){y.style.color=''+"rgb(1"+Math.floor(Math.random() * 100)+",1"+Math.floor(Math.random() * 100)+",1"+Math.floor(Math.random() * 100)+")"+'';},1000);
動作する単一行ソリューション(先頭にゼロを追加する):
var color="#"+"colors".split("").map(function(){return parseInt(Math.random()*0x10).toString(16);}).join("");
var html = '';
var red;
var green;
var blue;
var rgbColor;
for ( var i = 1; i <= 100; i += 1) {
red = Math.floor(Math.random() * 256 );
green = Math.floor(Math.random() * 256 );
blue = Math.floor(Math.random() * 256 );
rgbColor = 'rgb(' + red + ',' + green + ',' + blue + ')';
html += '<div style="background-color:' + rgbColor + '"></div>';
}
document.write(html);
このパッケージを試してみてください - https://www.npmjs.com/package/gen-random-colors 0から5までの色を設定する機能も提供します(0が最も暗い)
私は100色の異なるコントラストの色を生成しました、あなたはあなたの必要性に従って値を増やすことができます:
Feedle例: http://jsfiddle.net/zFbfE/29/
それは私のために働くと私はそれがあなたにも役立つだろうと思います
この例で最も良いのは、100個のランダムな色が生成され、色が各ページロードで同じになるということです。
私はこの場合parseIntが好きです:
parseInt(Math.random()*0xFFFFFFFF).toString(16)
再帰あり
var randomColor = (s='') => s.length === 6 ? '#' + s : randomColor(s + '0123456789ABCDEF'[Math.floor(Math.random() * 16)]);
randomColor();
eS6のArray.from()メソッドを使用して、私はこのソリューションを作成しました:
function randomColor() {
return "#"+ Array.from({length: 6},()=> Math.floor(Math.random()*16).toString(16)).join("");
}
私が見た他の実装では、16進値の先頭にゼロがある場合でも、数字に6桁が含まれていることを確認する必要があります。
K ._の回答はこのためにES6のpadStartを使用しました。
function randomColor() {
return `#${Math.floor(Math.random() * 0x1000000).toString(16).padStart(6, 0)}`
}
私が見たもう一つの良い一行解決策は
function randomColor() {
return '#'+ ('000000' + (Math.random()*0xFFFFFF<<0).toString(16)).slice(-6);
}
function randomColor(format = 'hex') {
const rnd = Math.random().toString(16).slice(-6);
if (format === 'hex') {
return '#' + rnd;
}
if (format === 'rgb') {
const [r, g, b] = rnd.match(/.{2}/g).map(c=>parseInt(c, 16));
return `rgb(${r}, ${g}, ${b})`;
}
}
function getHashColor() {
var hash = "0123456789ABCDEF";
var hashColor = "#";
for (var i = 0; i < 6; i++)
hashColor += hash[Math.floor(Math.random() * hash.length)];
document.getElementById('demo').style.background = hashColor
}
<div id="demo" style="background:red;height:300px;width:300px"></div>
<button type="button" onclick="getHashColor()">Clik Me</button>
map(常に有効なRGB色を返す)
`rgb(${[1,2,3].map(x=>Math.random()*256|0)})`
let c= `rgb(${[1,2,3].map(x=>Math.random()*256|0)})`
console.log(c);
document.body.style.background=c