我正在使用'#'+Math.floor(Math.random()*16777215).toString(16);
在按键时生成随机的十六进制颜色。
这用于在按下小写字母键时更改背景颜色。
我想更改此代码以通过键代码播种。 我怎么能这样做?
我尝试了'#'+Math.floor(e.which*16777215).toString(16);
,但这会产生7个字符的代码,而不是6个
答案 0 :(得分:18)
通过说你想要一个“种子”随机数,我假设每次按下相同的键时你想要相同的颜色。遗憾的是,您无法控制JavaScript中的Math.random()
种子,因为它不接受种子作为参数,就像在其他一些语言中一样。
您可以使用以下内容生成随机查找的十六进制数字:
Math.floor((Math.abs(Math.sin(seed) * 16777215)) % 16777215).toString(16);
这应该为ASCII范围内的所有内容生成唯一编号,但某些颜色可能非常相似。
最后的remainder操作% 16777215
可确保该号码永远不会超过#ffffff
。
<强>更新强>
以下是explicitly shows the colors generated by the charCodes of a-z。
的示例版本答案 1 :(得分:3)
您收到一个7
字母代码,因为您正在处理一个无法用十六进制表示为6
个字符的数字。
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;
}
根据需要添加种子。