2015-11-04 121 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()功能是填補了十六進制數有前導零的一種巧妙的方法]