You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

eCharts钻取后返回顶层仍显示返回按钮问题咨询

问题

使用ECharts实现了两个柱状图,其中id为main2的图表带钻取功能。点击图表数据钻取后会显示返回按钮,点击返回按钮能回到初始图表,但返回后按钮仍停留在图表顶层,只有刷新页面才能移除。

原因

ECharts的setOption方法默认是合并配置项,而非完全覆盖。点击返回时调用myChart.setOption(option),但原始option中没有定义graphic配置,所以之前添加的返回按钮图形元素不会被自动移除,依然保留在图表上。

解决方法

在返回时的配置中显式清空graphic元素,或者初始化时给option添加空的graphic数组,确保返回时合并配置后清空按钮。以下是两种实现方式:

方式一:返回时显式清空

修改返回按钮的点击事件,在setOption中添加graphic: []:

onclick: function () {
  myChart.setOption({
    ...option,
    graphic: [] // 显式清空所有图形元素
  });
}

方式二:初始化时添加空graphic

给原始option添加空的graphic数组,这样返回时直接调用myChart.setOption(option)即可自动合并清空:

var option = {
  xAxis: {
    data: ['Animals', 'Fruits', 'Cars']
  },
  yAxis: {},
  dataGroupId: '',
  animationDurationUpdate: 500,
  graphic: [], // 初始化空的graphic配置
  series: {
    // 原有series配置不变
  }
};
修改后的完整代码(方式二)
<td class='drilldown center' id='main2' style='width: 30vw; height:45vh' >
  <script type='text/javascript'>
    var chartDom = document.getElementById('main2');
    var myChart = echarts.init(chartDom);
    var option = {
      xAxis: {
        data: ['Animals', 'Fruits', 'Cars']
      },
      yAxis: {},
      dataGroupId: '',
      animationDurationUpdate: 500,
      graphic: [],
      series: {
        type: 'bar',
        id: 'sales',
        data: [
          {
            value: 5,
            groupId: 'animals'
          },
          {
            value: 2,
            groupId: 'fruits'
          },
          {
            value: 4,
            groupId: 'cars'
          }
        ],
        universalTransition: {
          enabled: true,
          divideShape: 'clone'
        }
      }
    };
    const drilldownData = [
      {
        dataGroupId: 'animals',
        data: [
          ['Cats', 4],
          ['Dogs', 2],
          ['Cows', 1],
          ['Sheep', 2],
          ['Pigs', 1]
        ]
      },
      {
        dataGroupId: 'fruits',
        data: [
          ['Apples', 4],
          ['Oranges', 2]
        ]
      },
      {
        dataGroupId: 'cars',
        data: [
          ['Toyota', 4],
          ['Opel', 2],
          ['Volkswagen', 2]
        ]
      }
    ];
    myChart.on('click', function (event) {
      if (event.data) {
        var subData = drilldownData.find(function (data) {
          return data.dataGroupId === event.data.groupId;
        });
        if (!subData) {
          return;
        }
        myChart.setOption({
          xAxis: {
            data: subData.data.map(function (item) {
              return item[0];
            })
          },
          series: {
            type: 'bar',
            id: 'sales',
            dataGroupId: subData.dataGroupId,
            data: subData.data.map(function (item) {
              return item[1];
            }),
            universalTransition: {
              enabled: true,
              divideShape: 'clone'
            }
          },
          graphic: [
            {
              type: 'text',
              left: 50,
              top: 20,
              style: {
                text: 'Back',
                fontSize: 18
              },
              onclick: function () {
                myChart.setOption(option);
              }
            }
          ]
        });
      }
    });
    
    option && myChart.setOption(option);
  </script>
</td>

内容的提问来源于stack exchange,提问作者Jlv

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 02:35:14