我有一个固定宽度的div渐变应用使用css。我想建立基于滑块的颜色选择器的基础上,这个梯度。
当我拖动滑块我计算的百分比位置,我想得到十六进制或RGB颜色代码的基础上,这个值。
我的想法是创建一个定义了开始/停止位置和颜色的数组,然后根据滑块位置从该数组中找到两个值,然后以某种方式找到以下两个值之间的颜色:这就是我无法前进的地方。
演示:http://jsfiddle.net/pdu8rpfv/
var gradient = [
[
0,
'ff0000'
],
[
28,
'008000'
],
[
72,
'0000ff'
],
[
100,
'ff0000'
]
];
$( "#slider" ).slider({
min: 1,
slide: function( event, ui ) {
var colorRange = []
$.each(gradient, function( index, value ) {
if(ui.value<=value[0]) {
colorRange = [index-1,index]
return false;
}
});
$('#result').css("background-color", 'red');
}
});
9条答案
按热度按时间hgtggwj01#
我可以使用这个函数来解决这个问题,这个函数基于less.js函数:http://lesscss.org/functions/#color-operations-mix
我只需要传递渐变数组中两个最接近的颜色代码和滑块句柄所在位置的比率(在滑块宽度的帮助下可以很容易地计算出来)。
http://jsfiddle.net/vksn3yLL/
6ioyuze22#
有一个很好的库可以处理各种颜色操作chroma.js
然后
qmb5sa223#
这是将百分比转换为颜色的另一种方法
这个例子使一个显示的值从红色变为绿色取决于它的值(像例如在excel条件格式化):
请参见以下演示:
x一个一个一个一个x一个一个二个x
jexiocij4#
三色渐变
以防万一有人想要一个3色渐变,这里有一个使用红色,黄色和绿色的例子:
colorGradient
函数的github JS代码可以在here中找到。演示:
x一个一个一个一个x一个一个二个一个x一个一个三个一个
06odsfpq5#
无限数量的颜色渐变(两个或更多)
如果你有2,3,4或20种颜色,你可以使用这个解决方案。生成一个
HTML
元素和风格的CSS
渐变背景。然后看看一个单一的像素颜色值。1.创建一个
<canvas>
元素。宽度为101px(0到100%),高度为1px(我们不关心高度)。然后将背景色设置为渐变。参见initCanvas(colorsArray)
方法。1.查看画布上的一个像素,并返回它的颜色。参见方法
getColor(percent)
。1.最后你可以找到一个由5种颜色(红色,橙色,绿色,石灰,蓝色)渐变的例子。
我的代码有两个方法
initCanvs()
和getColors()
,所以你不会为每个颜色选择生成新的画布。但是如果你每次都有新的渐变,你可以合并它们。9rygscc16#
这是我实现的多颜色渐变集RGB。(没有阿尔法通道)。扩展变种以前的答案。
wfauudbj7#
用和费利佩·里贝罗的答案相似的逻辑,
我已经创建了一个javascript
color-scales
来处理它。你也可以输入多个色标以及设置透明度级别。现场演示如下:https://codepen.io/dalisc/pen/yLVXoeR
该软件包的链接在这里:https://www.npmjs.com/package/color-scales
示例用法:
该软件包可以根据您的需要输出十六进制、rgb或rgba字符串,还可以输出自定义Color对象({r,g,b,a}),以备您选择单个颜色分量。
当我尝试在基于Javascript的应用程序上模拟Tableau Jmeter 板时,遇到了类似的问题。我意识到这是Tableau和Microsoft Excel等数据可视化工具的常见功能,因此我创建了一个npm包来在Javascript应用程序上处理它。如果您想减少代码,可以使用该包。
zlhcx6iw8#
基于Gils上面的回答,我创建了一个类,它可以处理线性渐变沿着特定百分比的渐变,所以它可以很容易地处理从CSS复制过来的更复杂的渐变。
https://jsfiddle.net/ctk916xa/2/
icnyk63a9#
我的两分钱,计算一个线性的任意向量列表,一个任意的维度,与任意停止(可能是有用的CYMK梯度,但实际上我写这个,因为我不喜欢重复代码的红色,绿色和蓝色):
然后是一些测试代码:
这并不包括很多注解,但简而言之,
LinearGradient()
接受一个颜色列表(作为向量或3元素数组)和停止(每种颜色在其峰值处),并返回一个函数,该函数计算范围0..1内不同点的渐变。实用函数rgb
用于生成rgb()
颜色表达式,以供CSS使用。