ECharts 事件处理

ECharts 提供了强大的 事件处理机制,可以响应用户的交互,支持 点击、鼠标悬停、数据项选择等操作,让图表更加动态和互动。


1. 事件类型

ECharts 支持多种常见的事件类型,主要包括:

  • 点击事件 (click)
  • 鼠标悬停事件 (mouseover, mouseout)
  • 数据项选择事件 (select, unselect)
  • 图例切换事件 (legendselectchanged, legendselected)
  • 区域缩放事件 (datazoom, brush)
  • 滑动事件 (mousemove, mouseup, mousedown)

你可以通过监听这些事件并执行相应的操作。


2. 事件监听

ECharts 的事件监听采用了 on 方法,通常的语法如下:

chart.on('事件名', function (params) {
    // 事件处理逻辑
});

  • chart.on():绑定事件
  • 事件名:例如 click, mouseover
  • params:事件的回调参数,包含了该事件的相关信息。

3. 事件处理示例

3.1 点击事件

当用户点击某个图表元素(如柱状图的某一柱、地图上的某个地区)时,触发 click 事件。

chart.on('click', function (params) {
    console.log('点击事件', params);
    alert('你点击了 ' + params.name + ',值为 ' + params.value);
});

📌 params 包含的信息:

  • params.name:点击的项名称
  • params.value:点击的项的数值
  • params.seriesType:图表的类型(如 'bar', 'line'

3.2 鼠标悬停事件

当鼠标移到图表元素上时,触发 mouseover 事件。

chart.on('mouseover', function (params) {
    console.log('鼠标悬停事件', params);
    // 例如:高亮显示当前元素
    chart.dispatchAction({
        type: 'highlight',
        seriesIndex: params.seriesIndex,
        dataIndex: params.dataIndex
    });
});

📌 params 还包括:

  • params.seriesIndex:系列的索引(对于同类图表)
  • params.dataIndex:数据项的索引

3.3 数据项选择与取消选择

selectunselect 事件会在用户选择或取消选择图表中的数据项时触发,通常用于 数据项的高亮显示、筛选等

chart.on('select', function (params) {
    console.log('数据项被选择', params);
});

chart.on('unselect', function (params) {
    console.log('数据项取消选择', params);
});

📌 params 包含:

  • params.selected:返回数据项的选择状态

3.4 图例切换事件

当用户点击图例来隐藏或显示某个系列时,会触发 legendselectchanged 事件。

chart.on('legendselectchanged', function (params) {
    console.log('图例切换事件', params);
    // params.selected 是一个对象,表示每个系列的可见性
});

📌 params.selected

  • params.selected 是一个包含系列名称和对应选择状态的对象,true 表示该系列可见,false 表示不可见。

3.5 区域缩放事件

datazoom 用于数据区域的缩放。当用户使用鼠标拖动、滚动缩放图表时,会触发此事件。

chart.on('datazoom', function (params) {
    console.log('数据区域缩放', params);
});

📌 params 包含的内容:

  • params.start:缩放起始位置
  • params.end:缩放结束位置

3.6 区域选择事件(brush)

brush 事件可以用于 区域选择(如矩形选择区域),通常与 datazoom 联合使用。

chart.on('brush', function (params) {
    console.log('区域选择事件', params);
});

📌 params 包含:

  • params.batch:当前选择的区域批次

4. 事件触发与取消

除了绑定事件,ECharts 还提供了 手动触发事件 的功能,使用 dispatchAction 方法。

4.1 手动触发事件

chart.dispatchAction({
    type: 'highlight',  // 高亮
    seriesIndex: 0,     // 第一个系列
    dataIndex: 0        // 第一个数据点
});

4.2 手动取消事件

chart.dispatchAction({
    type: 'downplay',  // 取消高亮
    seriesIndex: 0,
    dataIndex: 0
});


5. 事件绑定与解绑

可以使用 off 方法解绑事件监听,通常在图表销毁或切换数据时会使用。

5.1 解绑事件

chart.off('click', clickHandler);  // 解绑点击事件

5.2 移除所有事件

chart.off();  // 移除所有绑定的事件


6. 事件响应参数

事件回调函数通常会接收到一个 params 对象,其中包含了有关事件发生的详细信息。

常见的 params 属性:

  • params.type:事件类型
  • params.componentType:事件对应的组件类型(如 series, xAxis
  • params.name:数据项的名称
  • params.value:数据项的值
  • params.dataIndex:数据项的索引

7. 完整示例:综合事件处理

var chart = echarts.init(document.getElementById('main'));

var option = {
    title: { text: 'ECharts 事件示例' },
    tooltip: {},
    legend: { data: ['销量'] },
    xAxis: { data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日'] },
    yAxis: {},
    series: [{
        name: '销量',
        type: 'bar',
        data: [5, 20, 36, 10, 10, 20, 15]
    }]
};

chart.setOption(option);

// 绑定点击事件
chart.on('click', function (params) {
    alert('你点击了 ' + params.name + ',值为 ' + params.value);
});

// 绑定鼠标悬停事件
chart.on('mouseover', function (params) {
    chart.dispatchAction({
        type: 'highlight',
        seriesIndex: params.seriesIndex,
        dataIndex: params.dataIndex
    });
});


8. 总结

ECharts 通过事件处理使得图表更加互动,常见的事件类型包括:

  • 点击、鼠标悬停、选择、图例切换等
  • 可以使用 on() 方法绑定事件,使用 dispatchAction() 手动触发事件。
  • 事件响应参数 可以提供关于事件的详细信息,方便进行动态交互和更新图表。

🚀 你在 ECharts 图表中希望处理哪些具体事件?