2010-09-14 85 views
2

我需要產生給定顏色的所有255/256顏色變化,是否有一些建議開始,或使用jQuery庫?jQuery的顏色變化

在此先感謝。

+2

你是什麼意思的「變異」? – 2010-09-14 14:21:16

+1

這是否接近? http://stackoverflow.com/questions/1177826/simple-color-variation – 2010-09-14 14:21:46

+2

實際上只有一種顏色。它只有1600萬變化。 – recursive 2010-09-14 14:23:07

回答

4

我假設你正在討論對某個特定顏色值的紅色,綠色和藍色通道(我認爲這就是你所說的「顏色」的含義)進行某種算術運算。我只能猜測你想要的輸入和輸出值,但這裏是一個例子來開始,操縱RGB空間*中的值。假設你的輸入是一個十六進制數:

var color = 0xFFD700, // "gold" 

    // separate the channels using bitmasks 
    redValue = color & 0xFF0000, // redValue is 0xFF0000 
    greenValue = color & 0x00FF00, // greenValue is 0x00D700 
    blueValue = color & 0x0000FF; // blueValue is 0x000000 

// now we can manipulate each color channel independently 
var lessRed = redValue - 0x010000, 
    moreBlue = blueValue + 0x000001, 
    newColor = lessRed + greenValue + moreBlue; // newColor is 0xFED701 

所以,一個方式生產通過改變紅色通道,保持綠色和藍色恆定產生的所有顏色的數組:

var colors = [], 
    startColor = 0x00D700, 
    endColor = 0xFFD700, 
    incr = 0x010000; 

while (startColor <= endColor) 
{ 
    colors.push(startColor); 
    startColor = startColor + incr; 
} 

// print the hex values 
var i, len = colors.length, out = []; 
for (var i=0; i<len; i++) 
{ 
    out.push('0x' + colors[i].toString(16)) 
} 
console.log(out.join('\n')) 

如果輸入是一個字符串,你只需要先將它轉換爲數字。

var input = 'FFD700', 
    hexValue = parseInt(input, 16); 
console.log(hexValue.toString(10)); // prints: 16766720 
console.log(hexValue.toString(16)); // prints: FFD700 

哦,不需要jQuery!


*this answer,RGB空間可能不是最好的色彩空間的使用,但根據你的問題,我覺得是。

+0

哇,真棒! – Trafalmadorian 2010-09-14 15:18:44

0

謝謝。

我發現了兩個有趣的概念:

我要去從發揮一點與概念: http://www.xarg.org/project/jquery-color-plugin-xcolor/

$ .xcolor.lighten和$ .xcolor.darken

另一個有趣的閱讀: http://javascript.internet.com/miscellaneous/true-color-darkening-and-lightening.html

但隨着紅,綠,藍的最後一個doestn工作: FF0000 00FF00 0000FF

也許只需要一點點修復就可以接受3個「真實」的紅色,綠色和藍色十六進制值,但我失去了。