生成随机播种的十六进制颜色?

时间:2011-11-15 05:55:20

标签: javascript jquery random

我正在使用'#'+Math.floor(Math.random()*16777215).toString(16);在按键时生成随机的十六进制颜色。

这用于在按下小写字母键时更改背景颜色。

我想更改此代码以通过键代码播种。 我怎么能这样做?

我尝试了'#'+Math.floor(e.which*16777215).toString(16);,但这会产生7个字符的代码,而不是6个

4 个答案:

答案 0 :(得分:18)

通过说你想要一个“种子”随机数,我假设每次按下相同的键时你想要相同的颜色。遗憾的是,您无法控制JavaScript中的Math.random()种子,因为它不接受种子作为参数,就像在其他一些语言中一样。

您可以使用以下内容生成随机查找的十六进制数字:

Math.floor((Math.abs(Math.sin(seed) * 16777215)) % 16777215).toString(16);

A small demonstration

这应该为ASCII范围内的所有内容生成唯一编号,但某些颜色可能非常相似。

最后的remainder操作% 16777215可确保该号码永远不会超过#ffffff

您还可以使用sinMath等其他cos函数代替exp

<强>更新

以下是explicitly shows the colors generated by the charCodes of a-z

的示例版本

答案 1 :(得分:3)

您收到一个7字母代码,因为您正在处理一个无法用十六进制表示为6个字符的数字。

基数16中的

16777215(基数10)是FFFFFF。如果您的十进制数增加任何更大,则将使用另一个十六进制字母/数字来表达它。

要使代码正常运行,请确保16777215最高。

222似乎是可能的最高密钥代码(如果我弄错了,请纠正我):

Math.floor(e.which * 16777215 / 222).toString(16);

答案 2 :(得分:-1)

使用简单的JavaScript就是:

function getRandomColor() {
        var letters = '0123456789ABCDEF'.split('');
        var color = '#';
        for (var i = 0; i < 6; i++ ) {
            color += letters[Math.round(Math.random() * 15)];
        }
        return color;
    }

您可以在此处查看:http://sweb1.dmit.nait.ca/~bkoepke1/Random%20Colour%20Generator/

答案 3 :(得分:-2)

十六进制颜色代码具有从00到FF连接的3个组件,以形成单个字符串。它不仅仅是一个6个字符的十六进制数。因此,随机颜色生成器将类似于:

function randomHexColor() {
    var x, c = '#';
    var i = 3;
    while (i--) {
     x = (Math.random()*256|0).toString(16).toUpperCase();
     c += (x.length < 2? '0' : '') + x;
    }
    return c;
}

根据需要添加种子。