有时候在颜色表示上可能需要数值转化,十六进制向rgb转化时,rgb中的数值是十进制,所以根本上的问题就是十六进制向十进制转化。这时候我们就注意到一个函数parseInt(),他不仅可以做数值取整,还可以进行其它进制向十进制转化。
如果被处理数值是以‘0’开头,那么parseInt()会默认为其后数值是八进制。
如果被处理数值是以‘0x’开头,那么parseInt()会默认为其后数值是十六进制。
例:
parseInt('0xFF') // 255
parseInt('0x33') // 51
这时候我们就可以对十六进制颜色值进行转化了。
function colorToRGBA (num) {
var reg = /^([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/; //判断传入字符是否符合十六进制颜色值规范
var color = num.toLowerCase();
if (color && reg.test(color)) {
if (color.length === 3) { //将三位颜色值转为六位
var newColor = "";
for (var i = 0; i < 3; i += 1) {
newColor += color.slice(i, i + 1).concat(color.slice(i, i + 1));
}
color = newColor;
}
//处理六位的颜色值
var changeColor = [];
for (var i = 0; i < 6; i += 2) {
changeColor.push(parseInt("0x" + color.slice(i, i + 2))); //每两个字符做一次十进制转化
}
return "rgb(" + changeColor.join(",") + ")";
} else {
return color;
}
}