echarts动态改变legend中的颜色

效果如图
在这里插入图片描述

  getChart1(bgColor, title, color, echartData, data) {
      let formatNumber = function (num) {
        let reg = /(?=(\B)(\d{3})+$)/g;
        return num.toString().replace(reg, ",");
      };
      let total = echartData.reduce((a, b) => {
        return a + b.value * 1;
      }, 0);

      let option = {
        color: color,
        tooltip: {
          trigger: "item",
        },

        legend: {
          orient: "vertical",
          icon: "circle",
          itemWidth: 8, // 图例项宽度
          left: "57%",
          itemGap: 18, // 调整图例项之间的间距
          align: "left",
          top: "middle",
          symbolKeepAspect: false,
          textStyle: {
            color: "#333",
            align: "left",
            fontSize: 12,
            rich: {
              a: {
                verticalAlign: "right",
                align: "left",
                width: 85,
                fontSize: 14,
              },
            },
          },
          formatter: (name) => {
            let total = 0;
            let itemRatio = 0;
            let className = "";
            let target;
            for (let i = 0, l = echartData.length; i < l; i++) {
              itemRatio = echartData[i].itemRatio;
              total += Number(echartData[i].value);
              if (echartData[i].name == name) {
                target = echartData[i].value;
              }
              className = `color${i}`;
            }
            let str =
              "{a|" +
              name +
              "}{" +
              className +
              "| " +
              target +
              "/" +
              itemRatio +
              "%}";
            return str;
          },
        },
        title: [
          {
            text: "{name|" + title + "}\n{val|" + formatNumber(total) + "}",
            top: "center",
            left: total > 100 ? "13%" : "20%",
            textStyle: {
              rich: {
                name: {
                  fontSize: 18,
                  fontWeight: "normal",
                  color: "#686f78",
                  padding: total > 100 ? [8, 35] : [8, 0],
                },
                val: {
                  fontSize: 28,
                  fontWeight: "bold",
                  color: "#333333",
                },
              },
            },
          },
        ],

        series: [
          {
            type: "pie",
            radius: ["61%", "76%"],
            center: ["24%", "50%"],
            data: echartData,
            hoverAnimation: false,
            labelLine: {
              normal: {
                length: 20,
                length2: 120,
                lineStyle: {
                  color: "#e6e6e6",
                },
              },
            },
            label: {
              show: false,
            },
            tooltip: {
              valueFormatter: function (value) {
                for (let i = 0, l = echartData.length; i < l; i++) {
                  return value + echartData[i].itemUnit;
                }
              },
            },
          },
        ],
      };
      //使用rich,来动态展示legend.title 以不同的颜色描边
      for (let i = 0; i < echartData.length; i++) {
        let key = `color${i}`;

        option.legend.textStyle.rich[key] = {
          color: echartData[i].itemColor,
          align: "left",
          fontSize: 12,
        };
      }

      this.charOption = option;
      window.addEventListener("resize", this.listenResize);
    },
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值