UNPKG

@iicoding/utils

Version:

Browser 端 - 类型判断 - 类似 koa 的异步compose - sleep - 扩展对象属性 - 扩展 storage 对象功能

203 lines (194 loc) 6.95 kB
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; } function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } import { isNumber, isString } from '..'; /** * @summary 随机生成一个颜色值 * @param color 默认颜色值 * @return #xxxxxxx 返回16进制的颜色值 */ export var getRandomColor = function getRandomColor(color) { if (color && (color === null || color === void 0 ? void 0 : color.length) >= 6) { if (color.startsWith('#')) return color; return "#".concat(color); } var hex = Math.floor(Math.random() * 16777216).toString(16); // 少于 6 位 凑够6位 while (hex.length < 6) { hex = '0' + hex; } //返回‘#'开头16进制颜色 return '#' + hex; }; /** * @summary 十六进制转 rgb / rgba * @param hex 十六进制颜色值 * @param opacity 透明度 * @param onlyValue 是否仅返回 rbg/rgba value 比如 [0,0,0]/[0,0,0,1] */ export function color2rgb(hex, opacity, onlyValue) { var rgb = []; // 定义rgb数组 if (/^\#[0-9A-F]{3}$/i.test(hex)) { // 判断传入是否为#三位十六进制数 var sixHex = '#'; hex.replace(/[0-9A-F]/gi, function (kw) { // 把三位16进制数转化为六位 sixHex += kw + kw; return kw; }); hex = sixHex; // 保存回hex } if (/^#[0-9A-F]{6}$/i.test(hex)) { // 判断传入是否为#六位十六进制数 hex.replace(/[0-9A-F]{2}/gi, function (kw) { // 十六进制转化为十进制并存入数组 rgb.push(eval("0x".concat(kw))); return kw; }); } else { rgb.push(0, 0, 0); } if (opacity) { rgb.push(opacity); } return onlyValue ? rgb : "".concat(opacity ? 'rgba' : 'rgb', "(").concat(rgb.join(','), ")"); // 输出 RGB 或者 RGBA 格式颜色 } /** * @summary rgb / rgba 转 十六进制 * @param hexStr rgb/rgba 的颜色值 */ export var hexadecimal2color = function hexadecimal2color(hexStr) { //十六进制颜色值的正则表达式 var reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6}|[0-9a-fA-f]{8}|[0-9a-fA-f]{6}[0-9]{2})$/; if (reg.test(hexStr.toString())) { return hexStr; } else { var temp = []; var strHex = '#'; var commonCondition = function commonCondition(str) { var x = str.toString().trim(); if (x.startsWith('.')) { x = x.slice(1); } return (isString(x) || isNumber(x)) && !isNaN(+x); }; var dataProcessing = function dataProcessing(source) { return source.filter(function (x) { return commonCondition(x); }).map(function (item) { var x = item.trim(); if (x.startsWith('0') || x.startsWith('.')) { return "0.".concat(x.split('.').at(-1)); } if (+x > 255) { return '255'; } return parseInt(x, 10) + ''; }); }; if (isString(hexStr)) { // 分成数组后,过滤 不是 string / number 的项, 且去除前后空格 temp = dataProcessing(hexStr.replace(/(?:\(|\)|rgba|rgb|RGBA|RGB)*/g, '').split(',')); } if (Array.isArray(hexStr)) { if (hexStr.length === 1 && isString(hexStr[0])) { return hexadecimal2color(hexStr[0]); } temp = dataProcessing(hexStr); } if (temp.length > 2) { temp = temp.slice(0, 3); for (var i = 0; i < temp.length; i++) { if (i !== 3) { if (temp[i] === '0') { strHex += '00'; } else { var newItem = Number(temp[i]).toString(16); if (newItem.length < 2) { newItem = '0' + newItem; } strHex += newItem; } } else { strHex += temp[i] === '0' ? '' : Number(temp[i]) * 100; } } strHex = strHex.toUpperCase(); } return strHex; } }; /** * @summary RGB 颜色值转换为 HSL. * * @description 转换公式参考自 http://en.wikipedia.org/wiki/HSL_color_space. * @description r, g, 和 b 需要在 [0, 255] 范围内 * @description 返回的 h, s, 和 l 在 [0, 1] 之间 * * @param rgb number[] * @return Array HSL各值数组 */ export var rgb2hsl = function rgb2hsl(rgb) { var _rgb = _slicedToArray(rgb, 3), r = _rgb[0], g = _rgb[1], b = _rgb[2]; r /= 255; // [0, 1] g /= 255; // [0, 1] b /= 255; // [0, 1] var max = Math.max(r, g, b); var min = Math.min(r, g, b); var d = max - min; var l = (max + min) / 2; var s = d === 0 ? 0 : l > 0.5 ? d / (2 - 2 * l) : d / (2 * l); var h = 0; if (d !== 0) { switch (max) { case r: h = (g - b) / d + (g < b ? 6 : 0); break; case g: h = (b - r) / d + 2; break; case b: h = (r - g) / d + 4; break; default: break; } h /= 6; } var H = Math.ceil(h * 360); var S = Math.ceil(s * 100); var L = Math.ceil(l * 100); return { str: " ".concat(H, " ").concat(S, "% ").concat(L, "%"), hsl: { h: H, s: S, l: L } }; }; /** * 修改 rgba 中的透明度 * @param rgbaColor 颜色值 * @param newOpacity 新的透明度 0-1 之间 */ export var changeRgba = function changeRgba(rgbaColor, newOpacity) { var matches = rgbaColor.match(/(\d+)/g); if (matches) { // 将字符串转换为数组形式 var colorArray = matches.map(Number); if (colorArray) { // 修改透明度值 colorArray[3] = newOpacity; // 重新构建 RGBA 颜色值字符串 return 'rgba(' + colorArray.join(', ') + ')'; } } return rgbaColor; };