2012-01-04 39 views
4

可能重複:
Javascript color gradient如何找出漸變中的所有顏色?

我有一個顏色(比方說黃色)和兩個彩色(藍) - 它們構成了一個梯度。
基於0到100的值(0表示黃色,100表示​​藍色),我想表示色彩1和2的混合。

我想在移動瀏覽器(Safari專門)中做到這一點。

有沒有辦法在JavaScript中做到這一點?

+0

我認爲這也將取決於有多少像素的梯度覆蓋。更多的像素=更多的顏色。例如,一個10px的漸變只能有10種可能的顏色。你在尋找「中間」顏色還是你真的想要「所有」顏色? – 2012-01-04 19:02:36

+0

@Madmartigan我只是在尋找與數字相對應的顏色。 – AngryHacker 2012-01-04 19:04:09

+0

好吧,我*想*我明白了。你想要(最大)100種顏色的範圍?無論如何我沒有解決辦法,我只是覺得這個問題還不清楚。 – 2012-01-04 19:06:28

回答

19

如果你想要做的是創造一個顏色,是其它兩種顏色之間的一定百分比(0-100),你可以做到這一點與此javascript:

function makeGradientColor(color1, color2, percent) { 
    var newColor = {}; 

    function makeChannel(a, b) { 
     return(a + Math.round((b-a)*(percent/100))); 
    } 

    function makeColorPiece(num) { 
     num = Math.min(num, 255); // not more than 255 
     num = Math.max(num, 0);  // not less than 0 
     var str = num.toString(16); 
     if (str.length < 2) { 
      str = "0" + str; 
     } 
     return(str); 
    } 

    newColor.r = makeChannel(color1.r, color2.r); 
    newColor.g = makeChannel(color1.g, color2.g); 
    newColor.b = makeChannel(color1.b, color2.b); 
    newColor.cssColor = "#" + 
         makeColorPiece(newColor.r) + 
         makeColorPiece(newColor.g) + 
         makeColorPiece(newColor.b); 
    return(newColor); 
} 

此功能假設使用兩個端點顏色的每個r,g和b通道值之間的線性插值進行梯度,使得50%梯度值是每個r,g,b值(呈現的兩種顏色之間的中點)的中點。一次也可以製作不同類型的漸變(使用不同的插值函數)。

這個結果分配到的背景下,您使用的CSS顏色值我添加到返回的結果是這樣的:

// sample usage 
var yellow = {r:255, g:255, b:0}; 
var blue = {r:0, g:0, b:255}; 
var newColor = makeGradientColor(yellow, blue, 79); 
element.style.backgroundColor = newColor.cssColor; 
+0

太好了。如何將newColor分配給myDiv.style.backgroundColor? – AngryHacker 2012-01-04 20:41:44

+0

@AngryHacker - 你是否試圖給你的背景指定一個純色,這個背景是你的另外兩種顏色之間的範圍?或者,你是否試圖讓你的背景變成一個漸變? – jfriend00 2012-01-04 20:45:50

+0

我想爲背景指定一個純色。實質上,我試圖將您的方法的返回值分配給背景。 – AngryHacker 2012-01-04 20:48:08