共计 1235 个字符,预计需要花费 4 分钟才能阅读完成。
ECharts 官网教程
详情请看官网教程
前言:相信很多人有这种需求,在点击折线图非节点的时候不能触发点击事件,而官网又没有这方面的教程,只能自己默默的研究了
解决方案如下:
// 基于准备好的 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 携带的信息:
mychart.getZr().on(‘click’,params=>{})
获取到鼠标点击位置:
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 获取到可能需要的一些信息,可以很好的实现需求,并且不会有其它的性能影响,完美实现了如题的需求。
正文完
发表至: javascript
2019-06-21