ECharts官网教程html
详情请看官网教程canvas
前言:相信不少人有这种需求,在点击折线图非节点的时候不能触发点击事件,而官网又没有这方面的教程,只能本身默默的研究了echarts
解决方案以下:dom
// 基于准备好的dom,初始化echarts实例 var mychart = 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] }] }; // 使用刚指定的配置项和数据显示图表。 mychart.setOption(option); //绑定点击事件 mychart.getZr().on("click", function(params) { const pointInPixel = [params.offsetX, params.offsetY]; if (mychart.containPixel("grid", pointInPixel)) { let xIndex = mychart.convertFromPixel({ seriesIndex: 0 }, [ params.offsetX, params.offsetY ])[0]; /*事件处理代码书写位置*/ } });
实现的代码解释以下:性能
使用getZr添加图表的整个canvas区域的点击事件,并获取params携带的信息:this
mychart.getZr().on('click',params=>{})code
获取到鼠标点击位置:htm
const pointInPixel= [params.offsetX, params.offsetY];教程
使用containPixel API判断点击位置是否在显示图形区域,下面的例子过滤了绘制图形的网格外的点击事件,好比X、Y轴lable、空白位置等的点击事件。索引
if (this.echart.containPixel('grid',pointInPixel)){}
使用API convertFromPixel获取点击位置对应的x轴数据的索引值,个人实现是借助于索引值的,固然能够获取到其它的信息,详细请查看文档。
let xIndex=this.echart.convertFromPixel({seriesIndex:0},[params.offsetX,
params.offsetY])[0];
其实在上一步骤中能够获取到丰富的诸如轴线、索引、ID等信息,能够在本身的事件处理代码中方便的使用。
这种方法仅响应图表区域的响应事件,经过convertFromPixel获取到可能须要的一些信息,能够很好的实现需求,而且不会有其它的性能影响,完美实现了如题的需求。