在 JS 中生成随机生成的十六进制颜色的免费十六进制颜色?

Generating complimentary hex color of randomly generated hex color in JS?

据我了解,您可以通过从白色 (#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 调用是用前导零填充十六进制数字的巧妙方法]