如何在 JavaScript 中获取渐变颜色的十六进制代码(基于值的 3 种颜色)

How to get hex code of the gradient color (3 colors based on values) in JavaScript

我正在尝试根据值在 3 种混合颜色中获取十六进制代码。

示例:

  1. 开始 - #FF0000(红色)。
  2. 中间 - #FFFF00(黄色)。
  3. 结束 - #008000(绿色)。

如果值为:

1 - 十六进制代码是 #FF0000

50 - 十六进制代码是 #FFFF00

100 - 十六进制代码是 #008000

1-50 等值之间,十六进制代码应与 Red-Yellow.

混合

50-100 十六进制代码混合 黄绿色 基于值增加。

我怎样才能做到这一点?

尝试

function change(e) { 
  box.style.background = gradient(e.target.value/100,'#FF0000','#FFFF00','#008000'); 
}

// t in ragne 0..1, start-middle-end are colors in hex e.g. #FF00FF
function gradient(t,start,middle,end) {  
  return t>=0.5 ? linear(middle,end,(t-.5)*2) : linear(start,middle,t*2);
}

function linear(s,e,x) {
  let r = byteLinear(s[1]+s[2], e[1]+e[2], x);
  let g = byteLinear(s[3]+s[4], e[3]+e[4], x);
  let b = byteLinear(s[5]+s[6], e[5]+e[6], x);
  return "#" + r + g + b;
}

// a,b are hex values from 00 to FF; x is real number in range 0..1
function byteLinear(a,b,x) {
  let y = (('0x'+a)*(1-x) + ('0x'+b)*x)|0;
  return y.toString(16).padStart(2,'0') // hex output
}
#box { width: 50px; height: 50px; background: #FF0000 }
<input type="range" min="0" max="100" oninput="change(event)" value="0">
<div id="box"></div>