如何用js随机生成一个16进制的颜色值呢?
如何实现16进制的颜色值和RGB/RGBA颜色进行相互转换呢?
随机生成16进制颜色值
function getRandomColor{
var str="#";
var arr=["0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"];
for(var i=0;i<6;i++){
// random函数生成的是0-1不包括1的数
var num=parseInt(Math.random()*16);
str+=arr[num];
}
return str;
}
十六进制颜色值转RGB颜色值
function hexToRgb(val) {
//HEX十六进制颜色值转换为RGB(A)颜色值
// 16进制颜色值的正则
var reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;
// 把颜色值变成小写
var color = val.toLowerCase();
var result = '';
if (reg.test(color)) {
// 如果只有三位的值,需变成六位,如:#fff => #ffffff
if (color.length === 4) {
var colorNew = '#';
for (var i = 1; i < 4; i += 1) {
colorNew += color.slice(i, i + 1).concat(color.slice(i, i + 1));
}
color = colorNew;
}
// 处理六位的颜色值,转为RGB
var colorChange = [];
for (var i = 1; i < 7; i += 2) {
colorChange.push(parseInt('0x' + color.slice(i, i + 2)));
}
result = 'rgb(' + colorChange.join(',') + ')';
return { rgb: result, r: colorChange[0], g: colorChange[1], b: colorChange[2] };
} else {
result = '无效';
return { rgb: result };
}
}
RGB/RGBA颜色值转十六进制颜色值
function rgbToHex(val) {
//RGB(A)颜色转换为HEX十六进制的颜色值
let r,g,b,a
let regRgba = /rgba?\((\d{1,3}),(\d{1,3}),(\d{1,3})(,([.\d]+))?\)/, //判断rgb颜色值格式的正则表达式,如rgba(255,20,10,.54)
// replace过滤掉字符串中多余的空格
// match返回一个数组或null,匹配成功返回regRgba对val的匹配结果数组,匹配失败返回null
// 比如字符串rgba(255,20,10,.54),如果匹配成功,返回:['rgba(255,20,10,.54)','255','20','10',',.54','.54',index:0,input:'rgba(255,20,10,.54)',groups:undefined]
rsa = val.replace(/\s+/g, '').match(regRgba);
// 如果匹配成功
if (!!rsa) {
r = parseInt(rsa[1]).toString(16);
// 长度是1则前面补0,将长度补全为2位
r = r.length == 1 ? '0' + r : r;
g = parseInt(rsa[2]).toString(16);
g = g.length == 1 ? '0' + g : g;
b = parseInt(rsa[3]).toString(16);
b = b.length == 1 ? '0' + b : b;
// +作用可以理解为:Number(value),将括号内的变量转换为Number类型
a = +(rsa[5] ? rsa[5] : 1) * 100;
return { hex: '#' + r + g + b, r: parseInt(r, 16), g: parseInt(g, 16), b: parseInt(b, 16), alpha: Math.ceil(a) };
} else {
return { hex: '无效', alpha: 100 };
}
}