一般用于生成地图上点颜色的。
示例:
const cm=new ColorRangeMaker({color:[[80,163,186],[234,199,54],[217,78,93]],value:[0,200]});
const color=cm.make(100);
console.log(color);源码
class ColorRangeMaker{
option={};
constructor(option){
let vRange=option.value[1]-option.value[0];
if(option.color.length==2){//仅有两个颜色
let rA=(option.color[1][0]-option.color[0][0])/vRange;
let gA=(option.color[1][1]-option.color[0][1])/vRange;
let bA=(option.color[1][2]-option.color[0][2])/vRange;
this.option={vRange,rA,gA,bA,option};
}else{//两个以上颜色
const makers=[];
let vA=vRange/(option.color.length-1);
for(let i=1;i<option.color.length;i++){
const maker=new ColorRangeMaker({color:[option.color[i-1],option.color[i]],
value:[option.value[0]+vA*(i-1),
option.value[0]+vA*i]});
makers.push(maker);
}
this.option={makers,vA,option};
}
}
make(value){
const {makers,vRange,rA,gA,bA,vA,option}=this.option;
if(value<option.value[0]){
return option.color[0];
}else if(value>option.value[option.value.length-1]){
return option.color[option.color.length-1];
}else{
if(option.color.length==2){//仅有两个颜色
let color=option.color[0].map(a=>a);
let vATmp=value-option.value[0];
color[0]+=parseInt(rA*vATmp);
color[1]+=parseInt(gA*vATmp);
color[2]+=parseInt(bA*vATmp);
return color;
}else{
for(let i=1;i<option.color.length;i++){
if(value<=option.value[0]+vA*i){
return makers[i-1].make(value);
}
}
}
}
}
}
export default ColorRangeMaker;
















