带有7位数的javascript随机颜色必须

大家好, 我发现以下很棒的脚本用javascript创建一个随机颜色。
var randColor = '#'+(Math.random()*0xFFFFFF<<0).toString(16);
我对这个脚本唯一的问题是,它不能保证它返回一个正常的7位六角形字符串。 有时它只有6位数字,如#e1d19。 有没有办法强制7位十六进制值? 谢谢您的帮助。 编辑:这是我的实际问题:
function randColor() {
    var randColor = '#'+(Math.random()*0xFFFFFF<<0).toString(16);
    return randColor;
}

for (var i=0; i<100; i++) {
    $("#colorpicker").append("<div class='color' title="+randColor()+" style='background:"+randColor()+"'></div>");
}
我正在创建一个随机颜色的小div,当我点击它们时我抓住了它们的标题属性,我正在为我的身体背景着色。 但是目前我的代码以
<div style="background:rgb(176, 249, 252);" title="#8bc47d" class="color"></div>
因此,当我抓住title属性时,我给我的身体的颜色与小div显示的颜色不同。     
已邀请:
你可以自己填写:
function randomColor() {
  var rc = (~~(Math.random() * 0xFFFFFF)).toString(16);
  return '#' + new Array(7 - rc.length).join('0') + rc;
}
这招:
new Array(n).join(char)
是一种在字符串中获得char5ѭ“char”副本的方法。我从7而不是6中减去了值的原始长度,这样当字符串长度为5个字符时,我得到一个零,当4个得到两个时,等等。 编辑&mdash;当然(在其他答案中提到)你也可以像这样得到填充零:
  return '#' + "000000".slice(rc.length) + rc;
我必须做一些愚蠢的jsperf事情,看看哪个更快:-)     
var randColor = '#'+(0xFFFFFFFF-Math.random()*0xFFFFFFFF).toString(16).substr(0, 6);
    
这是我的(低科技)尝试:
var randColor = (Math.random()*0xFFFFFF<<0).toString(16);
while( randColor.length < 6 ) {
    randColor = '0' + randColor;
}
randColor = '#' + randColor;
    
我认为最好的办法是制作3组2位十六进制数字(每个R,G和B一个)。然后,只需用0填充左边,以确保它们都是两位数。也许像我提供的这个未经测试的代码参考:)
//I am GUESSING that this is how you get a 2-digit hex value ranging 0-255
var r = PadDigits(Math.random()*0xFF<<0).toString(16),2);
var g = PadDigits(Math.random()*0xFF<<0).toString(16),2);
var b = PadDigits(Math.random()*0xFF<<0).toString(16),2);

var randColor = '#'+r+g+b;

function PadDigits(n, totalDigits) 
{ 
    n = n.toString(); 
    var pd = ''; 
    if (totalDigits > n.length) 
    { 
        for (i=0; i < (totalDigits-n.length); i++) 
        { 
            pd += '0'; 
        } 
    } 
    return pd + n.toString(); 
} 
    
您希望它是六位数而不是七位数,但结果字符串应该是七个字符长,包括哈希值。我知道,虽然仍然在挑剔。这个怎么样:
var color = (Math.random() * 0xFFFFFF << 0).toString(16);
"#" + String(color + "000000").slice(0, 6);
如果你想在开头填充,这应该这样做:
var color = (Math.random() * 0xFFFFFF << 0).toString(16);
"#" + String("000000" + color).slice(-6);
为了澄清,这将填充整个字符串,而不是单独的通道。我想,既然你不是每个频道的随机化,那么你真正只想要填充的红色或蓝色频道(可能是红色,即第二个片段)。 你的第二个问题是你两次调用randColor,给你两种不同的颜色。您需要将生成的颜色存储在变量中,然后使用该变量两次。
for (var i=0; i<100; i++) {
    var color = randColor();
    $("#colorpicker").append("<div class='color' title=" + color + " style='background:" + color + "'></div>");
}
    
没有人发布它,这是我获得随机颜色的最短代码。
'#'+Math.random().toString(16).slice(-6)
随机浮点数为0.437920 ...... 将它转换为十六进制,你会得到类似0.7c13b41830e33的东西 拿最后6个字符来为你提供随机颜色# 易于理解,简短而有效。     

要回复问题请先登录注册