@qn-pandora/pandora-visualization
Version:
Pandora 通用可视化库
59 lines (58 loc) • 1.8 kB
JavaScript
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 + ")";
}