UNPKG

@xiaomengqiang/charts

Version:

hcharts library for web visualization

104 lines (97 loc) 3.15 kB
/** * Copyright (c) 2024 - present OpenTiny HUICharts Authors. * Copyright (c) 2024 - present Huawei Cloud Computing Technologies Co., Ltd. * * Use of this source code is governed by an MIT-style license. * * THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, * BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR * A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS. * */ /** * 循环取出颜色 */ function getColor(colors, index) { return colors[index % colors.length]; } /** * 十六进制转rgba, 如codeToRGB("#6d8ff0",0.5) --> 'rgba(109,143,240,0.5)' */ function codeToRGB(code, opacity) { if (code === undefined) { return undefined; } var result = []; result.push(parseInt(code.substring(1, 3), 16)); result.push(parseInt(code.substring(3, 5), 16)); result.push(parseInt(code.substring(5), 16)); return "rgba(" + result.join(',') + "," + opacity + ")"; } /** * rgba转十六进制 codeToHex('rgba(255,0,0,.5)') --> '#fffcfc' * 将red、blue等转换为十六进制 */ function codeToHex(color) { switch (color) { case 'red': return '#ff0000'; case 'blue': return '#0000ff'; case 'green': return '#00ff00'; case 'pink': return '#FFC0CB'; case 'yellow': return '#FFFF00'; case 'orange': return '#FFA500'; case 'black': return '#000000'; case 'white': return '#ffffff'; case 'gray': return '#808080'; case 'purple': return '#800080'; } if (color.includes('#')) { if (color.length === 7) { return color; } else if (color.length === 4) { return color[0] + color[1] + color[1] + color[2] + color[2] + color[3] + color[3]; } } var values = color.replace(/rgba?\(/, '').replace(/\)/, '').replace(/[\s+]/g, '').split(','); var a = parseFloat(values[3] || 1); var r = Math.floor(a * parseInt(values[0]) + (1 - a) * 255); var g = Math.floor(a * parseInt(values[1]) + (1 - a) * 255); var b = Math.floor(a * parseInt(values[2]) + (1 - a) * 255); return "#" + ("0" + r.toString(16)).slice(-2) + ("0" + g.toString(16)).slice(-2) + ("0" + b.toString(16)).slice(-2); } /** * 修改 'rgba(109,143,240,0.5)' 格式下的颜色透明度 */ function changeRgbaOpacity(rgba, opacity) { var _rgba$match = rgba.match(/\d+(\.\d+)?/g), r = _rgba$match[0], g = _rgba$match[1], b = _rgba$match[2]; return "rgba(" + r + "," + g + "," + b + "," + opacity + ")"; } /** * * 将color转换6位16进制格式 */ function transColor(colorStr) { // 使用正则表达式提取颜色代码中的每个字符 var regex = /^#?([a-f\d])([a-f\d])([a-f\d])$/i; var matches = colorStr.match(regex); // 如果匹配到了 3 个字符,则将其每个字符重复一遍 if (matches) { return "#" + matches[1] + matches[1] + matches[2] + matches[2] + matches[3] + matches[3]; } // 如果颜色代码格式不正确,则直接返回原来的代码 return colorStr; } export { changeRgbaOpacity, codeToHex, codeToRGB, getColor, transColor };