echarts - 鼠标事件详解

一、echarts 事件概念

chart.on(eventName, query, handler);

1. 鼠标事件类型 eventName

ECharts 支持9种常规的鼠标事件类型,包括'click''dblclick''mousedown''mousemove''mouseup''mouseover''mouseout''globalout''contextmenu'事件。

  • click:鼠标单击目标元素触发。
  • dblclick:鼠标双击目标元素触发。
  • mousedown:在目标元素上按下鼠标键时触发。
  • mouseup:在目标元素上释放按下的鼠标键时触发。
  • mousemove:鼠标在目标元素内部移动时不断触发。
  • mouseover:鼠标移入目标元素触发,移动到其后代元素也会触发。
  • mouseout:鼠标移出目标元素事件。
  • globalout:鼠标移出整个图表事件。
  • contextmenu:鼠标右键事件。

2. 鼠标事件参数 handler

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

myChart.on('click', function(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 数组中的 indexdataIndex: number;// 传入的原始数据项data: Object;// sankey、graph 等图表同时含有 nodeData 和 edgeData 两种 data,// dataType 的值会是 'node' 或者 'edge',表示当前点击在 node 还是 edge 上。// 其他大部分图表中只有一种 data,dataType 无意义。dataType: string;// 传入的数据值value: number | Array;// 数据图形的颜色。当 componentType 为 'series' 时有意义。color: string;
};

举例说明
在这里插入图片描述

 var dom = document.getElementById('container');var myChart = echarts.init(dom, null, {renderer: 'canvas',useDirtyRect: false});var app = {};var option;option = {legend: {data: ['series0', 'series1'],},tooltip: {trigger: 'axis',axisPointer: {type: 'shadow',shadowStyle: {color: '#FD8F67',opacity: 0.1,},},},xAxis: {type: 'category',data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']},yAxis: {type: 'value'},series: [{name: 'series0',data: [120, 200, 150, 80, 70, 110, 130],type: 'bar'},{name: 'series1',data: [100, 200, 150, 80, 70, 110, 130],type: 'bar'}]};if (option && typeof option === 'object') {myChart.setOption(option);}if (myChart) {myChart.on('click', function(params) {// 控制台打印数据的名称console.log(params.name, params.dataIndex, params.dataIndex, params.seriesIndex, params.value);});}// 控制台输出
// 点击 Mon 的第一根柱子
params.name: Mon params.dataIndex 0 params.seriesIndex 0 params.value 120
// 点击 Mon 的第二根柱子
params.name: Mon params.dataIndex 0 params.seriesIndex 1 params.value 100
// 点击 Tue 的第一根柱子
params.name: Tue params.dataIndex 1 params.seriesIndex 0 params.value 200

3. 鼠标事件参数 query

query 可以实现对指定的组件的图形元素的触发回调,这个参数一般可以忽略不写。

query可为 string或者 Object

如果为 string 表示组件类型。格式可以是 ‘mainType’ 或者 ‘mainType.subType’。例如:

chart.on('click', 'series', function() {});
chart.on('click', 'series.line', function() {});
chart.on('click', 'dataZoom', function() {});
chart.on('click', 'xAxis.category', function() {});

如果为 Object,可以包含以下一个或多个属性,每个属性都是可选的:

{${mainType}Index: number // 组件 index${mainType}Name: string // 组件 name${mainType}Id: string // 组件 iddataIndex: number // 数据项 indexname: string // 数据项 namedataType: string // 数据项 type,如关系图中的 'node', 'edge'element: string // 自定义系列中的 el 的 name
}

例如:

// series index 1 的系列中的元素被 'click' 时,此方法被回调。
myChart.on('click', { seriesIndex: 1, }, function(params) {\console.log('params.name:', params.name, "params.dataIndex", params.dataIndex, "params.seriesIndex", params.seriesIndex, "params.value", params.value);
});

二、echarts 的复杂事件

1. 监听空白事件

简单的点击事件

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

上面的 echarts 事件虽然可以监听点击事件,但是只限于点击 echarts 中有数据的部分,而对于没有数据的区域,点击无效。

如果想需要监听画布的“空白处”所触发的事件,需要使用 zrender 事件。

zrender 事件与 echarts 事件不同。前者是当鼠标在任何地方都会被触发,而后者是只有当鼠标在图形元素上时才能被触发。事实上,echarts 事件是在 zrender 事件的基础上实现的,也就是说,当一个 zrender 事件在图形元素上被触发时,echarts 将触发一个 echarts 事件给开发者。

有了 zrender 事件,我们就可以实现监听空白处的事件。需要注意的是 zrender 事件和 echarts 事件返回的参数不同

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

2. zrender 事件的应用

getZr()方法可以拿到柱状图阴影的点击位置

myChart.getZr().on('click', params => {let pointInPixel = [params.offsetX, params.offsetY]if (chart.containPixel('grid', pointInPixel)) {let xIndex = chart.convertFromPixel({ seriesIndex: 0 }, [params.offsetX, params.offsetY])[0]console.log(xIndex)}
}

xIndex是被点击的柱形的index,若要实现获取具体的数据对象,则需要拿到series的数组,再通过index拿到对应的数据对象。
在这里插入图片描述

三、组件交互的行为事件

在 ECharts 中基本上所有的组件交互行为都会触发相应的事件,常用的事件和事件对应参数在 events 文档中有列出。

下面是监听一个图例开关的示例:

// 图例开关的行为只会触发 legendselectchanged 事件
myChart.on('legendselectchanged', function(params) {// 获取点击图例的选中状态var isSelected = params.selected[params.name];// 在控制台中打印console.log((isSelected ? '选中了' : '取消选中了') + '图例' + params.name);// 打印所有图例的状态console.log(params.selected);
});

四、代码触发 ECharts 中组件的行为

echarts 的一些事件可以调用 myChart.dispatchAction({ type: '' })触发图表行为。
可以设置默认图表展示tooltip:

 myChart.dispatchAction({type: 'showTip',seriesIndex: 0,dataIndex: 0});

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/744588.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言【典型算法编程题】总结

以下最全总结! 一,分支结构 1,if 编写程序,从键盘上输入三角形的三个边长(实数),判断这三个边能否构成三角形(构成三角形的条件为:任意两边之和大于第三边),如果能构成三角形,则计算三角形的面积并输出(保留2位小数);如果不能构成三角形,则输出“Flase”字符…

OCR-free相关论文梳理

⚠️注意:暂未写完,持续更新中 引言 通用文档理解,是OCR任务的终极目标。现阶段的OCR各种垂类任务都是通用文档理解任务的子集。这感觉就像我们一下子做不到通用文档理解,退而求其次,先做各种垂类任务。 现阶段&…

App Inventor 2 Clipboard 拓展:实现剪贴板的复制粘贴功能

效果如下: 此 Clipboard 拓展由中文网开发及维护,最新版本 v1.0,基于 TaifunClipboard 开发。 使用方法 属性及方法很简单,默认操作成功后显示提示信息,SuppressToast设置为 假 后,则不显示提示信息。 经测…

工业界真实的推荐系统(小红书)-重排:多样性算法-MMR、DPP、结合业务规则

课程特点:系统、清晰、实用,原理和落地经验兼具 b站:https://www.bilibili.com/video/BV1HZ421U77y/?spm_id_from333.337.search-card.all.click&vd_sourceb60d8ab7e659b10ea6ea743ede0c5b48 讲义:https://github.com/wangsh…

掌握SWOT分析:深入了解企业战略利器

在当今充满挑战和机遇的商业世界中,SWOT分析成为了企业战略制定和执行的不可或缺的工具。SWOT分析是一种系统性方法,用于评估企业内部的优势和劣势,以及外部环境中的机遇和威胁。本文将深入探讨SWOT分析的各个方面,揭示其深层次的…

数据结构从入门到精通——堆

堆 前言一、二叉树的顺序结构及实现 (堆)1.1二叉树的顺序结构1.2堆的概念及结构 二、堆的练习题答案 三、堆的实现3.1堆向下调整算法3.2堆的创建3.3建堆时间复杂度3.4堆的插入3.5堆的删除3.6堆的代码实现 四、堆的具体实现代码Heap.hHeap.cTest.c堆的初始化堆的销毁…

数据结构(二)——顺序表和链表的比较

1、存取(读/写)方式 顺序表可以顺序存取,也可以随机存取,在第i个位置上执行存取操作,顺序表仅需一次访问. 链表只能从表头开始依次顺序存取,链表在第i个位置执行存取则需从表头开始依次访问i次. 2、逻辑结构与物理结…

unity显示当前时间

1建立文本组件和一个空对象 2创建一个脚本并复制下面代码 using System.Collections; using System.Collections.Generic; using TMPro; using UnityEngine;public class showtime: MonoBehaviour {public TextMeshProUGUI time;private void Update(){string currentTime Sy…

sqllab第十五关通关笔记

知识点: 布尔盲注 无任何有价值的回显;但是回显信息只有两种(区别正确和错误)通过布尔盲注爆破处正确的信息利用过滤条件对数据进行过滤;只显示自己想要的信息 尝试进行admin admin登录发现没有任何的回显信息 通过b…

Baumer工业相机堡盟工业相机如何通过NEOAPISDK实现双快门采集两张曝光时间非常短的图像(C++)

Baumer工业相机堡盟工业相机如何通过NEOAPISDK实现双快门采集两张曝光时间非常短的图像(C) Baumer工业相机Baumer工业相机定序器功能的技术背景Baumer工业相机通过NEOAPI SDK使用定序器功能预期的相机动作技术限制定序器的工作原理 Baumer工业相机通过NE…

视觉单目测距原理及实现

视觉单目测距原理及实现 结尾附赠非常宝贵的自动驾驶学习资料 附赠最全自动驾驶学习资料:链接

基于Java+SpringBoot+vue的智能农场管理系统详细设计和实现

基于JavaSpringBootvue的智能农场管理系统详细设计和实现 博主介绍:多年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言 文…

printf的栈

#include<stdio.h> #include<stdlib.h> int main() {int *p;pmalloc(8);*p1;*p2;p--;printf("%d %d\n",*p,*p);return 0; }

SpringBoot(接受参数相关注解)

文章目录 1.基本介绍2.PathVariable 路径参数获取信息1.代码实例1.index.html2.ParameterController.java3.测试 2.细节说明 3.RequestHeader 请求头获取信息1.代码实例1.index.html2.ParameterController.java3.测试 2.细节说明 4.RequestParameter 请求获取参数信息1.代码实例…

如何在群晖用Docker本地搭建Vocechat聊天服务并无公网ip远程交流协作

文章目录 1. 拉取Vocechat2. 运行Vocechat3. 本地局域网访问4. 群晖安装Cpolar5. 配置公网地址6. 公网访问小结 7. 固定公网地址 如何拥有自己的一个聊天软件服务? 本例介绍一个自己本地即可搭建的聊天工具,不仅轻量,占用小,且功能也停强大,它就是Vocechat. Vocechat是一套支持…

LabVIEW飞机液压基础试验台测试系统

LabVIEW飞机液压基础试验台测试系统 为解决飞机液压基础实验台人工控制操作复杂、测试时间长、测试流程易出错等问题&#xff0c;开发了一套基于LabVIEW的飞机液压基础试验台测试系统。该系统通过计算机控制&#xff0c;实现了高度自动化的测试流程&#xff0c;有效提高了测试…

图片编辑器tui-image-editor

提示&#xff1a;图片编辑器tui-image-editor 文章目录 前言一、安装tui-image-editor二、新建components/ImageEditor.vue三、修改App.vue四、效果五、遇到问题 this.getResolve is not a function总结 前言 需求&#xff1a;图片编辑器tui-image-editor 一、安装tui-image-ed…

手写简易操作系统(八)--特权级以及TSS

前情提要 我们在这里梳理一下上面几节讲的内容 首先是计算机开机&#xff0c;BIOS接过第一棒&#xff0c;将第一个扇区MBR的内容导入到内存 0x7c00 的位置。 然后就是MBR中我们自己写的内容&#xff0c;将Loader导入到 0x600 的地址&#xff0c;Loader设置了GDT&#xff0c;…

WebAssembly探索篇(二)引入第三库的简单demo

文章目录 开发环境demo简单介绍实践出真知各个文件内容CMakeLists.txtmain.cpp cmake 编译结果 遇到问题错误1&#xff1a;both async and sync fetching of the wasm failedvscode安装Preview on Web Server插件 最近因为项目原因&#xff0c;研究了一下WebAssembly。2015年上…

Java研学-SSM综合案例(二)

二 MyBatis逆向工程 1 介绍 Maven中的插件&#xff0c;可根据数据表生成实体类 Mapper 接口和 Mapper XML&#xff0c;可单独创建一个Maven项目&#xff0c;将所需的资源生成后&#xff0c;拷贝到对应的项目中(推荐)&#xff0c;或者直接在项目中使用。 2 配置pom依赖插件 &…