function changeColor(value) {if (/rgba?/.test(value)) {var array = value.split(",");//不符合rgb或rgb规则直接returnif (array.length < 3)return "";value = "#";for (var i = 0, color; color = array[i++];) {if(i < 4){//前三位转换成16进制color = parseInt(color.replace(/[^\d]/gi, ''), 10).toString(16);value += color.length == 1 ? "0" + color : color;}else{//rgba的透明度转换成16进制color = color.replace(')', '')var colorA = parseInt(color*255);var colorAHex = colorA.toString(16);value += colorAHex;}}value = value.toUpperCase();}return value;}// 函数调用var hexcolor1= changeColor('rgb(255,255,0)');console.log(hexcolor1); //#FFFF00var hexcolor2= changeColor('rgba(255,255,0,1)');console.log(hexcolor2); //#FFFF00FF
这个转换难点在rgba的A透明度是0-1的数字,而前边的R、G、B都是0-255的数字,所以说前边的三个都可以直接由十进制转换成十六进制,而透明度只能是0%-100%对应的0-255的数字,再转换成十六进制。
以下为大概的对应数: