Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在JS中生成随机生成的十六进制颜色的互补十六进制颜色?_Javascript_Random_Colors_Hex - Fatal编程技术网

Javascript 在JS中生成随机生成的十六进制颜色的互补十六进制颜色?

Javascript 在JS中生成随机生成的十六进制颜色的互补十六进制颜色?,javascript,random,colors,hex,Javascript,Random,Colors,Hex,据我所知,你可以通过从白色中减去已知颜色(#FFFFFF)得到给定十六进制颜色的互补颜色。在我的例子中,已知颜色是我使用以下代码随机生成的颜色: var randomColor = "#000000".replace(/0/g,function(){ return (~~(Math.random()*16)).toString(16);}); 我基本上想这样做: function compColor(randomColor){ return 0xFFFFFF - randomColor

据我所知,你可以通过从白色中减去已知颜色(#FFFFFF)得到给定十六进制颜色的互补颜色。在我的例子中,已知颜色是我使用以下代码随机生成的颜色:

var randomColor = "#000000".replace(/0/g,function(){
return (~~(Math.random()*16)).toString(16);});
我基本上想这样做:

function compColor(randomColor){
    return 0xFFFFFF - randomColor;
}

我有这个随机的十六进制数,但我不能从十进制数中减去它。我需要从十六进制转换为十进制,然后再转换回十六进制才能得到我想要的互补颜色吗?这似乎不是最有效的方法

我建议您将颜色保留为数字,从而使互补色的生成成为一个简单的数学运算

只有在需要时,才应将这些颜色转换为十六进制格式,或者任何其他字符串格式,例如
rgb(r,g,b)

一个选项是单个24位整数,最高8位为红色,最低有效位为绿色和蓝色:

function getRandomColor() {
    return Math.floor(Math.random() * 0x1000000);
}

function getComplementColor(c) {
    return 0xffffff - c;
}

function getHexColor(c) {
    return '#' + ("000000" + c.toString(16)).substr(-6);
}
[在
getHexColor()
函数中的串联和
substr
调用是一种用前导零填充十六进制数的巧妙方法]