【发布时间】:2016-05-16 08:45:57
【问题描述】:
我想从一些
该函数应该接受一个描述某种颜色的字符串,并返回一个具有红色、绿色、蓝色和 alpha 值的对象。
例如:
parseColor('red') -> { red: 255, green: 0, blue: 0, alpha: 1 }
parseColor('#f00') -> { red: 255, green: 0, blue: 0, alpha: 1 }
parseColor('rgb(255,0,0)') -> { red: 255, green: 0, blue: 0, alpha: 1 }
parseColor('hsla(0,100%,50%,0.1)') -> { red: 255, green: 0, blue: 0, alpha: 0.1 }
parseColor('transparent') -> { red: any_is_ok, green: any_is_ok, blue: any_is_ok, alpha: 0 }
所以,我尝试了这样的代码:
function parseColor(color) {
var x = document.createElement('div');
document.body.appendChild(x);
var color, rgba;
var red = 0, green = 0, blue = 0, alpha = 0;
try {
x.style = 'color: ' + color + '!important';
color = window.getComputedStyle(x).color
rgba = color.match(/rgba?\((.*)\)/)[1].split(',').map(Number);
red = rgba[0];
green = rgba[1];
blue = rgba[2];
alpha = '3' in rgba ? rgba[3] : 1;
} catch (e) {
}
x.parentNode.removeChild(x);
return {'red': red, 'green': green, 'blue': blue, 'alpha': alpha};
}
它适用于 Firefox、IE 和 Chrome。
但我想知道window.getComputedStyle(x).color 会返回什么?
此函数会总是以rgb() 或rgba() 格式返回颜色吗?
规范是怎么说的?
还有,还有其他方法可以实现parseColor 函数吗?
【问题讨论】:
-
window.getComputedStyle(x).color返回文档所说的返回内容。见developer.mozilla.org/en-US/docs/Web/API/Window/…。要找到其他方法,您可以搜索“npm html color”。这会导致你遇到这样的事情:github.com/substack/parse-color。另见stackoverflow.com/questions/11068240/…。 -
@torazaburo 看来
parse-color或color-convert(被parse-color使用)不支持alpha 值(透明度)。 -
@tsh 你交换了绿色和蓝色。它应该是
blue = rgba[2];和green = rgba[1];。 -
@Roberg 啊哈,感谢您指出我的错误。已编辑。
标签: javascript colors