今天做web交互的时候对服务器下发的rgb色百思不得其解,竟然是一串数字而且还有负数,后来观察了几列数据后发现其白色有可能为16777215或-1,那么意味着当数字小于0时会加上16777216,于是我百度了一下这个数字顿时茅塞顿开,原来是rgb所能表达的最大颜色(256 * 256 * 256),但是网页肯定必须使用rgb或者十六进制来表示,那么就写了个函数来转换一下:
// 转化为 255,255,255 这样的格式
function rgbFormat (value) {
var r = (value & 0xff0000) >> 16;
var g = (value & 0x00ff00) >> 8;
var b = (value & 0x0000ff);
return r + ',' + g + ',' + b;
}
// 转换为十六进制 prefix增加前缀可以方便直接生成带#号的颜色
function rgbHex (value, prefix) {
var code = parseInt(value);
var prefix = prefix || '';
if (code < 0) {
code = (256 * 256 * 256) + code;
}
var hex = code.toString(16);
return prefix + (Array(6).join(0) + hex).slice(-6);
}
var code = parseInt(value);
var prefix = prefix || '';
if (code < 0) {
code = (256 * 256 * 256) + code;
}
var hex = code.toString(16);
return prefix + (Array(6).join(0) + hex).slice(-6);
}
转换为16进制的时候关键要注意小于0时补成正数,以及十六进制不满6位不足自动补零(不然浏览器也识别不出来)