ECharts柱状图点击事件完整实现:数据列与背景点击处理

作者:微光时间:2026-10-30 23:51:51浏览:90

本文详细介绍ECharts柱状图点击事件的多种实现方式。针对普通柱条点击无效或需捕获背景点击的场景,提供了基于getZr()监听画布点击的解决方案,并补充了鼠标划过与划出事件的完整代码示例,帮助开发者实现更灵活的图表交互。

ECharts柱状图点击事件基础与背景点击方案

ECharts柱状图点击事件基础与背景点击方案

首先展示一段基础的ECharts图表初始化代码:

// 这样获取echarts的dom节点是因为:如果将柱状图封装成了一个组件,在一个页面中多次使用,若还是按常规获取dom节点,会报一个警告
let charts = echarts.getInstanceByDom(
  document.getElementById(props.id)
)
if (charts == null) {
  charts = echarts.init(document.getElementById(props.id))
}
charts.clear()
let option = {
	...
}
charts.resize()
charts.setOption(option)

如图所示,若需为柱状图添加点击交互,常规做法是直接监听图表实例的click事件。但这种方式仅能触发有数据值的蓝色柱条区域的点击,无法覆盖空白区域。

myChart.on('click', function (params) {
	console.log(params)
})

当柱条没有数据时,上述方法点击时将不会触发。若希望点击无数据的背景区域也能触发事件,可采用以下替代方案:

charts.getZr().off('click')		// 先取消点击,再触发,免得造成连续抖动触发
charts.getZr().on('click', function (params) {
	// 这个部分照抄,你想通过点击拿到的当前柱条的数据,都可以在下面这些属性中拿到,如果我注释没有你想要的,需要console一下charts.getOption()查找对应的属性名
    let pointInPixel = [params.offsetX, params.offsetY];
    if (charts.containPixel('grid', pointInPixel)) {
      let pointInGrid = charts.convertFromPixel({
        seriesIndex: 0
      }, pointInPixel);
      let xIndex = pointInGrid[1]; 			// 索引
      let handleIndex = Number(xIndex);
      let seriesObj = charts.getOption(); 	// 图表object对象
      let op = charts.getOption();
      //获得图表中点击的列
      let dataY = op.yAxis[0].data[handleIndex];  			//获取点击的列名
      let dataX = seriesObj.series[0].data[handleIndex]   	// 获取当前点击的柱条的数值 
		... // 写获取到当前点击需要的数值后的操作   
    }
})

鼠标划过与划出事件处理

此外,补充鼠标划过和划出事件的写法。其属性配置与点击事件类似,但事件名称具有特殊性:mousemove mouseout。这两组事件必须严格对应书写,使用其他名称可能导致事件失效。

// 划过
charts.getZr().off('mousemove');
charts.getZr().on('mousemove', function(params) {
})
// 划出
charts.getZr().off('mouseout');
charts.getZr().on('mouseout', function(params) {
})

总结

到此这篇关于echarts柱状图的点击事件的文章就介绍到这了,更多相关echarts柱状图点击事件内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!

作者最新文章