自学内容网 自学内容网

vue3项目页面实现echarts图表渐变色的动态配置

 完整代码可点击vue3项目页面实现echarts图表渐变色的动态配置-星林社区查看

一、背景

在开发可配置业务平台时,需要实现让用户对项目内echarts图表的动态配置,让用户脱离代码也能实现简单的图表样式配置。颜色作为图表样式的重要组成部分,其配置方式是项目要解决的重点问题。

二、难点整理

1.可以支持渐变的颜色选择器。

2.渐变色选择器取值结果与echarts图表配置要求的转换

3.图表配置资源存储与更新机制

4.渐变取色器位置配置导致取色器选中的色值发生变化触发事件change频繁被调用,引起最近选取颜色列表更新速率过快和图表刷新过快造成的资源浪费问题等。

三、解决方法

1.渐变取色器

因为开发时间问题,这里直接选用了TDesign的颜色选择器,具体可以参考TDesign官网

<div style="display: inline-block;vertical-align: middle;margin-right: 1rem;" >
    <t-color-picker
        v-model="lineColor"
        defaultValue="#409cff"
        :show-primary-color-preview="false"
         :recent-colors="recentcolorsList"
        @change="changeLineColorThrottle"
    />
</div>

2.渐变色值类型转换

tdesign取色器获取到的渐变色值为形如:linear-gradient(90deg,rgba(0, 0, 0, 1) 0%,rgb(73, 106, 220) 100%) 的css渐变色写法

echarts图表配置渐变色写法为:

"color":{
    "colorStops":[
        {"offset":0,"color":"#2378f7"},
        {"offset":0.5,"color":"#2378f7"},
        {"offset":1,"color":"#83bff6"}
    ],
    "x":0,
    "y":0,
    "x2":1,
    "y2":0.5,
    "type":"linear",
    "global":false
}

因此需要对两种类型进行转换。

1) rgb与hex色值表达转换
function hexToRgb(hex){
    let str = hex.replace("#", "");
          if (str.length % 3) {
            return "hex格式不正确!";
          }
          //获取截取的字符长度
          let count = str.length / 3;
          //根据字符串的长度判断是否需要 进行幂次方
          let power = 6 / str.length;
          let r = parseInt("0x" + str.substring(0 * count, 1 * count)) ** power;
          let g = parseInt("0x" + str.substring(1 * count, 2 * count)) ** power;
          let b = parseInt("0x" + str.substring(2 * count)) ** power;
 
          return `rgb(${r}, ${g}, ${b})`;
}
function rgbToHex(rgb){
    let arr = rgb
            .replace("rgb", "")
            .replace("(", "")
            .replace(")", "")
            .split(",");
          // 转十六进制
          let h = parseInt(arr[0]).toString(16);
          let e = parseInt(arr[1]).toString(16);
          let x = parseInt(arr[2]).toString(16);
          if(h.length<2){
            h = '0' + h 
          }
          if(e.length<2){
            e = '0' + e 
          }
          if(x.length<2){
            x = '0' + x 
          }
          return "#" + h + e + x;
}
2)角度与坐标参数x,x2,y,y2的转化

css角度是指水平线和渐变线之间的角度,逆时针方向计算。换句话说,0deg 将创建一个从下到上的渐变,90deg 将创建一个从左到右的渐变。【注意很多浏览器(Chrome、Safari、firefox等)的使用了旧的标准,即 0deg 将创建一个从左到右的渐变,90deg 将创建一个从下到上的渐变。换算公式 90 - x = y 其中 x 为标准角度,y为非标准角度。】

linear-gradient() 函数会绘制出一系列与渐变线垂直的彩色线,每条线都匹配与渐变线相交点的颜色。这条渐变线由包含渐变图形的容器的中心点和一个角度来定义的。渐变线上的颜色值是由不同的点来定义,包括起始点、终点,以及两者之间的可选的中间点(中间点可以有多个)。起点是渐变线上代表起始颜色值的点。终点是渐变线上代表最终颜色值的点。这两个点都是由渐变线和从最近的顶点发出的垂直线之间的交叉点定义的。<


原文地址:https://blog.csdn.net/qq_42101569/article/details/143019732

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!