UNPKG

clay-core

Version:

Provide a more friendly web-side drawing interface!

109 lines (104 loc) 3.29 kB
var _rgb2hsl = function (R, G, B) { var R1 = +R / 255, G1 = +G / 255, B1 = +B / 255; var MAX = Math.max(R1, G1, B1); var MIN = Math.min(R1, G1, B1); var H, S, L; if (MAX === MIN) { H = 0; } else if (MAX === R1) { H = 60 * (G1 - B1) / (MAX - MIN); } else if (MAX === G1) { H = 60 * (B1 - R1) / (MAX - MIN) + 120; } else if (MAX === B1) { H = 60 * (R1 - G1) / (MAX - MIN) + 240; } if (H < 0) { H += 360; } L = (MAX + MIN) / 2; if (L === 0 || MAX === MIN) { S = 0; } else if (L > 0 && L <= 0.5) { S = (MAX - MIN) / (MAX + MIN); } else if (L > 0.5) { S = (MAX - MIN) / (2 - MAX - MIN); } return [+H.toFixed(2), +S.toFixed(2), +L.toFixed(2)]; }, _hsl2rgb = function (h, s, l) { var c = (1 - Math.abs(2 * l - 1)) * s; var x = c * (1 - Math.abs((h / 60) % 2 - 1)); var m = l - c / 2; var r, g, b; if (h >= 0 && h < 60) { r = (c + m) * 255; g = (x + m) * 255; b = m * 255; } else if (h >= 60 && h < 120) { r = (x + m) * 255; g = (c + m) * 255; b = m * 255; } else if (h >= 120 && h < 180) { r = m * 255; g = (c + m) * 255; b = (x + m) * 255; } else if (h >= 180 && h < 240) { r = m * 255; g = (x + m) * 255; b = (c + m) * 255; } else if (h >= 240 && h < 300) { r = (x + m) * 255; g = m * 255; b = (c + m) * 255; } else if (h >= 300 && h < 360) { r = (c + m) * 255; g = m * 255; b = (x + m) * 255; } return [+r.toFixed(0), +g.toFixed(0), +b.toFixed(0)]; }, _randomColors = function (num) { if (_is_number(num) && num > 3) { var temp = [], flag = 0; for (flag = 1; flag <= num; flag++) temp.push('rgb(' + (Math.random(1) * 230 + 20).toFixed(0) + ',' + (Math.random(1) * 230 + 20).toFixed(0) + ',' + (Math.random(1) * 230 + 20).toFixed(0) + ')'); return temp; } else { return ['red', 'green', 'blue']; } }; // 把颜色统一转变成rgba(x,x,x,x)格式 // 返回数字数组[r,g,b,a] clay.color = function (color) { var temp = clay('head').css('color', color).css('color').replace(/^rgba?\(([^)]+)\)$/, '$1').split(new RegExp('\\,' + _regexp_whitespace)); return [+temp[0], +temp[1], +temp[2], temp[3] == undefined ? 1 : +temp[3]]; }; // 获取一组色彩 clay.getColors = function (num, range, rgb) { if (!range) return _randomColors(num); //num:需要的颜色个数 //range:数组,取值0-360,色彩范围 //rgb: 可选,数组,参考颜色,是一组rgb var temp = (range[1] - range[0]) / num; var s, l; if (rgb) { var hsl = _rgb2hsl(rgb[0], rgb[1], rgb[2]); s = hsl[1]; l = hsl[2]; } else { s = 0.78; l = 0.4; } var array = []; for (var i = 0; i < num; i++) { rgb = _hsl2rgb(temp * i + range[0], s, l); array.push("rgb(" + rgb[0] + "," + rgb[1] + "," + rgb[2] + ")"); } return array; }; // 给一组数据,轮询执行一遍 clay.loop = function (datas, callback) { var flag = 0, data; for (data in datas) callback(datas[data], data, flag++); return clay; };