根据我的理解,您可以通过从白色中减去已知颜色(#FFFFFF)来获得给定十六进制颜色的互补颜色。在我的例子中,已知的颜色是我使用以下代码随机生成的颜色:
var randomColor = "#000000".replace(/0/g,function(){
return (~~(Math.random()*16)).toString(16);});
我基本上想要这样做:
function compColor(randomColor){
return 0xFFFFFF - randomColor;
}
我有这个随机的十六进制数,但是我无法从小数中减去它。我是否必须再次从十六进制转换为十进制并再次转换为十六进制以获得我正在寻找的免费颜色?看起来这不是最有效的方法。
答案 0 :(得分:4)
我建议您将颜色保留为数字,从而使补色的生成成为一种简单的数学运算。
只有在需要时才将这些颜色转换为十六进制格式,或者实际上是任何其他字符串格式,例如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);
}
[substr
函数中的连接和getHexColor()
调用是一种用前导零填充十六进制数字的简洁方法]