UNPKG

@qn-pandora/pandora-visualization

Version:

Pandora 通用可视化库

59 lines (58 loc) 1.8 kB
import { first, last, get } from 'lodash'; import { hexToRgb } from '../transforms/color'; /** * 渐变色 方程式 (x-x1)/(x2-x1)=(y-y1)/(y2-y1) * @param min 最小值 * @param max 最大值 * @param current 当前值 * @param colors 颜色 * @param defualtColor 默认颜色 * @returns */ export function getColor(min, max, current, colors, defualtColor) { if (defualtColor === void 0) { defualtColor = '#2c6dd2'; } var colorsLen = colors.length; if (colorsLen === 0) { return defualtColor; } if (colorsLen === 1) { return colors[0]; } if (current <= min) { return first(colors); } if (current >= max) { return last(colors); } // 分段 var splitNum = colorsLen - 1; var step = Math.floor((max - min) / splitNum) || 1; var i = 0; var currentSplitNum = 0; while (i < splitNum) { if (min + (i + 1) * step >= current) { currentSplitNum = i; break; } i++; } var currentStart = min + currentSplitNum * step; var currentEnd = min + (currentSplitNum + 1) * step; var startColor = get(colors, currentSplitNum); var endColor = get(colors, currentSplitNum + 1); if (!startColor || !endColor) { return defualtColor; } var startRgb = hexToRgb(startColor); var endRgb = hexToRgb(endColor); var r = ((current - currentStart) / (currentEnd - currentStart)) * (endRgb.r - startRgb.r) + startRgb.r; var g = ((current - currentStart) / (currentEnd - currentStart)) * (endRgb.g - startRgb.g) + startRgb.g; var b = ((current - currentStart) / (currentEnd - currentStart)) * (endRgb.b - startRgb.b) + startRgb.b; return "rgb(" + r + "," + g + "," + b + ")"; }