color-conversion-rgb
Version:
Color conversion for HEX to RGBA, HSL to RGBA, RGB to RGBA.
117 lines (109 loc) • 3.29 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
/**
* HEX to RGB.
* @param color HEX color
* @return object RGB色值
*/
var hexToRgb = function hexToRgb(color) {
var sColor = color.toLowerCase();
if (sColor) {
if (sColor.length === 4) {
var sColorNew = '#';
for (var i = 1; i < 4; i += 1) {
sColorNew += sColor.slice(i, i + 1).concat(sColor.slice(i, i + 1));
}
sColor = sColorNew;
}
var sColorChange = [];
for (var _i = 1; _i < 7; _i += 2) {
sColorChange.push(parseInt('0x' + sColor.slice(_i, _i + 2)));
}
return { r: sColorChange[0], g: sColorChange[1], b: sColorChange[2], a: 1 };
}
return null;
};
/**
* HSL to RGB.
* form http://en.wikipedia.org/wiki/HSL_color_space.
*
* @param Number h 色相
* @param Number s 饱和度
* @param Number l 亮度
* @return object RGB色值数值
*/
var hslToRgb = function hslToRgb(color) {
var _getHsl = getHsl(color),
h = _getHsl.h,
s = _getHsl.s,
l = _getHsl.l,
a = _getHsl.a;
var r = null;
var g = null;
var b = null;
if (s === 0) {
r = g = b = l; // achromatic
} else {
var hue2rgb = function hue2rgb(p, q, t) {
if (t < 0) t += 1;
if (t > 1) t -= 1;
if (t < 1 / 6) return p + (q - p) * 6 * t;
if (t < 1 / 2) return q;
if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;
return p;
};
var q = l < 0.5 ? l * (1 + s) : l + s - l * s;
var p = 2 * l - q;
r = hue2rgb(p, q, h + 1 / 3);
g = hue2rgb(p, q, h);
b = hue2rgb(p, q, h - 1 / 3);
}
return { r: Math.round(r * 255), g: Math.round(g * 255), b: Math.round(b * 255), a: a };
};
// example: hsl(0, 100%, 50%)
var getHsl = function getHsl(color) {
var begin = color.startsWith('hsla') ? 5 : 4;
var length = color.length;
var hslArray = color.slice(begin, length - 1).split(',');
var h = hslArray[0];
var s = percentToDecimal(hslArray[1]);
var l = percentToDecimal(hslArray[2]);
return { h: h, s: s, l: l, a: hslArray[3] || 1 };
};
// example: 10% to 0.1
var percentToDecimal = function percentToDecimal(percent) {
var temp = percent.trim();
return temp.slice(0, temp.length - 1);
};
/**
* RGB to RGB.
* @param color rgba
* @return object RGB色值
*/
var rgbaToRgba = function rgbaToRgba(color) {
var begin = color.startsWith('rgba') ? 5 : 4;
var length = color.length;
var rgbaArray = color.slice(begin, length - 1).split(',');
var r = rgbaArray[0];
var g = rgbaArray[1];
var b = rgbaArray[2];
return { r: r, g: g, b: b, a: rgbaArray[3] || 1 };
};
var randomColor = exports.randomColor = function randomColor(i) {
return i % 2 ? 'rgb(224,74,116)' : 'rgb(211,0,57)';
};
var reg = /^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/;
var getHoverRgbColor = exports.getHoverRgbColor = function getHoverRgbColor(color, opacity) {
var rgba = null;
if (!color) return randomColor();
if (reg.test(color)) {
rgba = hexToRgb(color);
} else if (color.startsWith('hsl')) {
rgba = hslToRgb(color);
} else if (color.startsWith('rgb')) {
rgba = rgbaToRgba(color);
}
return 'rgba(' + rgba.r + ', ' + rgba.g + ', ' + rgba.b + ', ' + (opacity || 0.65) + ')';
};