【发布时间】:2011-09-05 18:11:41
【问题描述】:
假设我有一些具有背景色和前景色的元素。
假设可以以不同的格式指定两种颜色(可以在样式属性中指定的任何颜色),例如 background = 'white' 或 'transparent', foreground = 'rgb(0, 0, 0)'。
使用纯javascript合并这些颜色以获得像rgb(128、128、128)这样的结果的最简单方法是什么?
谢谢。
【问题讨论】:
标签: javascript
假设我有一些具有背景色和前景色的元素。
假设可以以不同的格式指定两种颜色(可以在样式属性中指定的任何颜色),例如 background = 'white' 或 'transparent', foreground = 'rgb(0, 0, 0)'。
使用纯javascript合并这些颜色以获得像rgb(128、128、128)这样的结果的最简单方法是什么?
谢谢。
【问题讨论】:
标签: javascript
【讨论】:
只是因为我喜欢写复杂的脚本......
<span style="background-color:black; color:#fff";>Hi</span>
JS:
function getColorVals(color) {
color = color.replace("rgb", "").replace("(", "").replace(")", "");
return color.split(",");
}
var span = document.getElementsByTagName("span")[0];
var color1 = window.getComputedStyle(span).backgroundColor; //window.getComputedStyle ensures getting back rgb
var color2 = window.getComputedStyle(span).color;
var color1Vals = getColorVals(color1);
var color2Vals = getColorVals(color2);
var newColorVal = "rgb(";
for (i = 0; i < 3; i++) {
newColorVal += Math.round((Math.abs(color1Vals[i] - color2Vals[i]) / 2));
if(i<2) newColorVal += ",";
}
newColorVal += ")";
alert(newColorVal);
...您也可以轻松地处理其中的不透明度。
在颜色 val 计算中弹出 Math.round 以修复小数等。
【讨论】:
rgba 而不是 rgb 中工作(在这种情况下,透明的 rgba 值将是“rgba(0,0,0,0)”跨度>
您可能想查看rbgcolor.js。它“接受一个字符串并尝试从中找出有效的颜色”。也就是说,您可以简单地查看元素上的 CSS 颜色属性,通过这个 JS 输入它,然后获取 RGB 值。获得 RGB 值后,只需取每个通道的平均值即可创建新颜色。
如果你的元素的颜色是继承的,你可能需要做一些调整。例如,如果您的元素没有指定的颜色属性,请检查它的父元素,一直到 DOM。
【讨论】: