2015-11-04 75 views
2

根据我的理解,您可以通过从白色(#FFFFFF)中减去已知颜色来获得给定十六进制颜色的免费颜色。在我的情况下,已知的颜色是一个,我随意使用下面的代码生成:在JS中生成随机生成的十六进制颜色的免费十六进制颜色?

var randomColor = "#000000".replace(/0/g,function(){ 
return (~~(Math.random()*16)).toString(16);}); 

我基本上要做到这一点:

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

我有这样的随机十六进制数,但我米不能从小数减去它。我是否必须将十六进制转换为十进制并再次转换为十六进制才能获得我正在寻找的免费颜色?看起来这不是最有效的方式。

回答

4

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

仅在需要时,你应该转换这些颜色,以十六进制格式,或任何其他字符串格式,如rgb(r, g, b)

一种选择是一个单一的24位整数,冲在最上面的8位,然后绿色,在最显著位blue:

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()功能是填补了十六进制数有前导零的一种巧妙的方法]