ECharts 事件处理

ECharts 事件处理详解

ECharts 提供了非常丰富的事件系统,支持监听用户交互(如点击、鼠标悬停、缩放、图例切换等),并允许自定义处理逻辑。事件处理是实现图表交互(如点击跳转、弹窗提示、联动更新其他图表)的基础。

1. 事件绑定方式

ECharts 使用 myChart.on(eventName, handler) 绑定事件,myChart.off() 解绑。

// 绑定事件
myChart.on('click', function (params) {
    console.log('点击了', params);
});

// 指定系列或组件的事件(推荐,避免全局冲突)
myChart.on('click', 'series', function (params) { ... });
myChart.on('click', 'series.line', function (params) { ... });  // 只针对 line 系列

// 解绑事件
myChart.off('click', handler);  // 指定函数解绑
myChart.off('click');          // 解绑所有 click 事件

2. 常用事件列表

事件名触发时机params 参数主要内容
click点击图形元素或坐标轴seriesName, name, value, dataIndex 等
dblclick双击同 click
mousedown / mouseup鼠标按下/抬起同 click
mouseover鼠标移入元素同 click
mouseout鼠标移出元素同 click
globalout鼠标移出整个图表区域
legendselectchanged图例选中状态改变selected: {系列名: true/false}
dataZoom数据区域缩放start, end, batch[]
dataviewchanged数据视图编辑后
brushselected选框完成areas[], batch[]
rendered图表渲染完成(每次 setOption 后)
finished图表所有动画完成

3. 常见应用示例

示例1:点击柱状图/饼图显示详情

myChart.on('click', function (params) {
    if (params.componentType === 'series') {
        alert(`您点击了 ${params.seriesName} 的 ${params.name},值为 ${params.value}`);
        // 或跳转页面
        // window.location.href = `/detail?id=${params.data.id}`;
    }
});

示例2:点击饼图高亮并更新其他图表(联动)

myChart.on('click', 'series.pie', function (params) {
    // 高亮当前扇区
    myChart.dispatchAction({
        type: 'highlight',
        seriesIndex: params.seriesIndex,
        dataIndex: params.dataIndex
    });

    // 更新另一个图表(假设 otherChart)
    otherChart.setOption({
        title: { text: `详情:${params.name}` },
        series: [{ data: detailData[params.name] }]
    });
});

// 鼠标移出时取消高亮
myChart.on('mouseout', 'series.pie', function () {
    myChart.dispatchAction({ type: 'downplay' });
});

示例3:监听图例切换(legendselectchanged)

myChart.on('legendselectchanged', function (params) {
    console.log('当前选中系列:', params.selected);
    // 例如隐藏某些系列时提示
    const selectedCount = Object.values(params.selected).filter(v => v).length;
    if (selectedCount === 0) {
        alert('请至少选择一个系列!');
    }
});

示例4:监听 dataZoom 实现联动

myChart.on('datazoom', function (params) {
    // 将当前缩放范围同步到另一个图表
    otherChart.dispatchAction({
        type: 'dataZoom',
        start: params.start,
        end: params.end
    });
});

4. dispatchAction:主动触发动作

ECharts 提供 dispatchAction 方法,可程序化触发事件或动作。

// 高亮某个数据项
myChart.dispatchAction({
    type: 'highlight',
    seriesIndex: 0,
    dataIndex: 5
});

// 显示 tooltip
myChart.dispatchAction({
    type: 'showTip',
    seriesIndex: 0,
    dataIndex: 3
});

// 选框选择
myChart.dispatchAction({
    type: 'takeGlobalCursor',
    key: 'brush',
    brushOption: { brushType: 'rect' }
});

5. 完整示例:点击柱状图弹窗 + 高亮

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>ECharts 事件处理示例</title>
    <script src="https://cdn.jsdelivr.net/npm/echarts/dist/echarts.min.js"></script>
</head>
<body>
    <div id="main" style="width: 800px; height: 600px;"></div>
    <script>
        const myChart = echarts.init(document.getElementById('main'));
        myChart.setOption({
            title: { text: '点击柱子查看详情' },
            tooltip: {},
            xAxis: { data: ['衬衫', '毛衣', '裤子', '鞋子'] },
            yAxis: {},
            series: [{
                type: 'bar',
                data: [
                    { value: 5, id: 1 },
                    { value: 20, id: 2 },
                    { value: 36, id: 3 },
                    { value: 10, id: 4 }
                ]
            }]
        });

        myChart.on('click', function (params) {
            alert(`商品:${params.name}\n销量:${params.value}\nID:${params.data.id}`);
        });
    </script>
</body>
</html>

官方文档(最权威):

  • 事件与动作手册:https://echarts.apache.org/handbook/zh/concepts/event/
  • 事件列表:https://echarts.apache.org/zh/api.html#events

如果你有具体需求(如多图联动、点击钻取、自定义 tooltip 事件),告诉我,我可以给出更针对性的完整代码!

文章已创建 4391

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部