echart折线图点击事件包括任意位置
一、常规点击事件
在echarts中可以使用on
为图形添加点击事件,但是这种方式添加的点击事件,只有点击在图形元素上才会触发事件处理函数。
myChart.on('click',params=>{
// 可以设置点击的类型与响应的系列
if (params.seriesType === 'line') {
if (params.seriesIndex === 1) {
}
}
需要注意的是,如果是动态改变的每一次setOptions之后都添加事件会造成事件重复响应,所以可以先删掉事件再添加。
myChart.off('click')
缺点:
在折线图与柱状图中都具有很多不可触发的区域,特别是折线图中,只有点击在拐点上才会触发。在数据差别很大的图形中,想准确点击数据较小甚至为0的图形是非常困难的,这就使得一些交互体验不是很好。
二、响应图形任意位置的点击事件
这种方法借助于convertFromPixel和zr来实现需要的效果,实现方法如下:
myChart.getZr().on('click',params=>{
const pointInPixel= [params.offsetX, params.offsetY];
if (myCharts.containPixel('grid',pointInPixel)) {
let xIndex=myCharts.convertFromPixel({seriesIndex:0},[params.offsetX, params.offsetY])[0];
}
});
实现的代码解释如下:
myCharts.getZr().on('click',params=>{})
使用getZr添加图表的整个canvas区域的点击事件,并获取params携带的信息
const pointInPixel= [params.offsetX, params.offsetY];
获取到鼠标点击位置
if (myCharts.containPixel('grid',pointInPixel)) {}
使用containPixel API判断点击位置是否在显示图形区域,下面的例子过滤了绘制图形的网格外的点击事件,比如X、Y轴lable、空白位置等的点击事件。
let xIndex=myCharts.convertFromPixel({seriesIndex:0},[params.offsetX, params.offsetY])[0];
使用API convertFromPixel获取点击位置对应的x轴数据的索引值,
上一步骤中可以获取到丰富的诸如轴线、索引、ID等信息,可以在自己的事件处理代码中方便的使用。
这种方法仅响应图表区域的响应事件,通过convertFromPixel获取到可能需要的一些信息,可以很好的实现需求,并且不会有其它的性能影响,完美实现了如题的需求。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!