程序化梯度使用Javascript停止

时间:2011-01-02 19:34:16

标签: javascript jquery colors hex gradient

使用Javascript(jQuery),给出2个颜色值(例如2033ff3300a0)如何确定它们之间的某些渐变停止?

原因是,我打算使用一组颜色值:

    0 => '000000'
 8400 => 'f0ff00'
44000 => '2033ff'
68400 => '3300a0'

一天有86400秒,12:00 AM映射到0,晚上11:59映射到86399.随着时间的推移,指定元素的背景颜色通过{{1}更改为渐变列表中的相应颜色}。例如window.setInterval(function(e){ ... }, 1000),示例中的2:32:11PM = 52331位于2033ff3300a0之间。

我不需要使用值填充数组(除非这更容易),而是使用索引和值作为引用。

2 个答案:

答案 0 :(得分:6)

只需进行线性插值:

鉴于2033ff和3300a0作为开始和结束,你将做:

red1 = 0x2033ff >> 16;
green1 = (0x2033ff >> 8) & 0xFF;
blue1  = 0x2033ff & 0xFF;

red2 = 0x3300a0 >> 16;
green2 = (0x3300a0 >> 8) & 0xFF;
blue2  = 0x3300a0 & 0xFF;

time = 0.3 // This should be between 0 and 1

outred = time * red1 + (1-time) * red2;
outgreen = time * green1 + (1-time) * green2;
outblue = time * blue1 + (1-time) * blue2;

答案 1 :(得分:4)

我编写了库RainbowVis-JS作为将数字映射到颜色的通用解决方案。对于您的示例,您将使用:

var rainbow = new Rainbow(); 
rainbow.setSpectrum('2033ff', '3300a0');
rainbow.setNumberRange(1, 86400);
var colour = rainbow.colourAt(52331); // 2c14c5