echarts饼图区块指向特定位置

1,133 阅读1分钟

**背景:**需求要求点击饼图,饼图右侧出现相应数据,然后对应饼图区块指向数据区块

效果:

思路: 利用饼图的series.startAngle属性,为正值时饼图逆时针旋转startAngle度,负值相反的原理,使饼图旋转到相应的位置。

1. 将要旋转的区块旋转到起始位置(以圆心作坐标轴的第四象限)

2. 再逆时针旋转自身的一半即可

// 传入数组data数据,以及要旋转的区块名
function getStartAngle(list = [], name = '') {
  if (list.length && name) {
    const findIndex = list.findIndex((item) => item.name === name);
    let all = 0, left = 0, now = 0;
    // all为总值
    // left为在当前区块前的数据总值
    // now为当前区块值
    list.forEach((l, index) => {
      if (index < findIndex) {
        left += l.value
      } else if (index === findIndex) {
        now = l.value
      }
      all += l.value
    })
    if (all === 0) return 0
    const a = 360 * left / all; // 当前区块前被占用的度数
    const b = 360 * now / all; // 当前区块占用度数
    return a + (b / 2);
    // 逆时针旋转a,使当前区块到起始点
    // 再旋转自身的1/2既结果
  }
  return 0
}
const data = [
    {value: 335, name: '直达', selected: true},
                {value: 679, name: '营销广告'},
                {value: 1548, name: '搜索引擎'}
                ];

option = {
    series: [
              {
                type: 'pie',
                startAngle: getStartAngle(data, '直达'),
                radius: ['0', '70%'],
                center: ['50%', '50%'],
                data: data,
                label: {
                  position: 'inner'
                },
                labelLine: {
                  show: false
                },
              }
            ]
};

进阶 旋转到指定位置

我们可以利用getStartAngle方法旋转到指向右侧,然后再旋转到指定位置