Phiên bản của tôi có một chuỗi số HEX
, RGB
hoặc RGBa
làm đối số, không sử dụng regEx và trả về đối tượng có giá trị số màu đỏ, xanh lục và xanh dương (và alpha cho RGBa
).
var RGBvalues = (function() {
var _hex2dec = function(v) {
return parseInt(v, 16)
};
var _splitHEX = function(hex) {
var c;
if (hex.length === 4) {
c = (hex.replace('#','')).split('');
return {
r: _hex2dec((c[0] + c[0])),
g: _hex2dec((c[1] + c[1])),
b: _hex2dec((c[2] + c[2]))
};
} else {
return {
r: _hex2dec(hex.slice(1,3)),
g: _hex2dec(hex.slice(3,5)),
b: _hex2dec(hex.slice(5))
};
}
};
var _splitRGB = function(rgb) {
var c = (rgb.slice(rgb.indexOf('(')+1, rgb.indexOf(')'))).split(',');
var flag = false, obj;
c = c.map(function(n,i) {
return (i !== 3) ? parseInt(n, 10) : flag = true, parseFloat(n);
});
obj = {
r: c[0],
g: c[1],
b: c[2]
};
if (flag) obj.a = c[3];
return obj;
};
var color = function(col) {
var slc = col.slice(0,1);
if (slc === '#') {
return _splitHEX(col);
} else if (slc.toLowerCase() === 'r') {
return _splitRGB(col);
} else {
console.log('!Ooops! RGBvalues.color('+col+') : HEX, RGB, or RGBa strings only');
}
};
return {
color: color
};
}());
console.debug(RGBvalues.color('rgb(52, 86, 120)'));
//-> { r: 52, g: 86, b: 120 }
console.debug(RGBvalues.color('#345678'));
//-> { r: 52, g: 86, b: 120 }
console.debug(RGBvalues.color('rgba(52, 86, 120, 0.67)'));
//-> { r: 52, g: 86, b: 120, a: 0.67 }
console.debug(RGBvalues.color('#357'));
//-> { r: 51, g: 85, b: 119 }
Có thể hữu ích cho người khác. :)
Nguồn
2016-08-09 14:20:24
Không phải là tôi nhận thức được, nhưng tôi bị mê hoặc để được chứng minh là sai. –