ECharts中的事件与行为

日常开发中用到echarts,一般是用来展示数据,很少在图表上添加一些事件监听函数。但是没用过不代表没有,比如鼠标悬浮之后的高亮样式和鼠标悬浮后显示的tootip,这都属于默认的鼠标悬浮事件。

除此之外,如果想要实现其他的事件响应,可以监听这些事件,然后通过回调函数做出相应处理。

ECharts中的事件名称对应DOM事件名称,是小写字符串
ECharts支持常规的鼠标事件类型:
click、dblclick、mousedown、mousemove、mouseup、mouseover、mouseout、globalout、contextmenu

鼠标事件的处理

var myChart = echarts.init(document.getElementById('chart_'));
// 基本的事件监听函数
myChart.on('click', function(params){
	// TODO 鼠标点击事件逻辑处理代码
});

// 通过query参数,实现对指定的组件的图形元素的触发回调, query参数可以是string或者object
// myChart.on(eventName, query, handler);
myChart.on('click', 'series', function() {});
myChart.on('click', 'series.line', function() {});
myChart.on('click', {seriesName: 'xxx', name: 'i'}, () => {}); // object作为query,对象可以是一个或者多个

params参数,是所有鼠标事件都包含的,这个参数是一个包含点击图形数据信息的对象

type EventParams = {
  // 当前点击的图形元素所属的组件名称,
  // 其值如 'series'、'markLine'、'markPoint'、'timeLine' 等。
  componentType: string;
  // 系列类型。值可能为:'line'、'bar'、'pie' 等。当 componentType 为 'series' 时有意义。
  seriesType: string;
  // 系列在传入的 option.series 中的 index。当 componentType 为 'series' 时有意义。
  seriesIndex: number;
  // 系列名称。当 componentType 为 'series' 时有意义。
  seriesName: string;
  // 数据名,类目名
  name: string;
  // 数据在传入的 data 数组中的 index
  dataIndex: number;
  // 传入的原始数据项
  data: Object;
  // sankey、graph 等图表同时含有 nodeData 和 edgeData 两种 data,
  // dataType 的值会是 'node' 或者 'edge',表示当前点击在 node 还是 edge 上。
  // 其他大部分图表中只有一种 data,dataType 无意义。
  dataType: string;
  // 传入的数据值
  value: number | Array;
  // 数据图形的颜色。当 componentType 为 'series' 时有意义。
  color: string;
};

监听图表空白处的事件

解决这个问题之前,首先需要理解zrender事件。

实际上,鼠标点击在图表容器范围内( 不管是点击在图形元素上还是空白处)触发的是zrender事件,echarts事件是在zrender事件的基础上实现的,当一个zrender事件在图形元素上被触发时,echarts才会触发一个echarts事件。

myChart.getZr().on('click', function(event) {
  // 该监听器正在监听一个`zrender 事件`。
});
myChart.on('click', function(event) {
  // 该监听器正在监听一个`echarts 事件`。
});

在zrender事件的基础上,我们实现了监听空白处事件:

myChart.getZr().on('click', function(event) {
  // 没有 target 意味着鼠标/指针不在任何一个图形元素上,它是从“空白处”触发的。
  if (!event.target) {
    // 点击在了空白处,做些什么。
  }
});

组件交互的事件

具体配置文档

代码中触发事件

触发方式:

myChart.dispatchAction()

具体的行为有hightlight、downplay、select等。
具体配置文档