echar2 ,3 自定义右键菜单 右击事件

echarts2右键实现

在echarts2.x 的版本中对于开发者是不支持自定义右击事件的,但是可通过修改源码来实现效果;
echarts2.x源码修改文件有config.js和echarts.js文件两个部分;
1、修改源码文件config.js
config.js文件主要是开放给开发者可调用的属性和方法,用来处理用户的选择。首先需要开放一个右键动作给开发者调用:
给config文件注册右键事件CONTEXTMENU,开放右键事件入口给开发者,开发者可以使用CONTEXTMENU来添加自定义的右
键属性;

 

1

2

3

4

5

6

7

8

9

10

11

12

13

 

EVENT: {

// ‐‐‐‐‐‐‐全局通用

REFRESH: 'refresh',

RESTORE: 'restore',

RESIZE: 'resize',

CLICK: 'click',

DBLCLICK: 'dblclick',

CONTEXTMENU: 'contextmenu', #注册右击事件配置contextmenu

HOVER: 'hover',

MOUSEOUT: 'mouseout',

},

 

2、修改源码文件echarts.js
echarts.js内部依赖于另一个插件的叫ZRender,当然对于大部分图表而言不需要ZRender的,首先需要给全局通用
变量ZR_EVENT_LISTENS中添加CONTEXTMENU事件;构造函数根据注册的事件集合向底层ZRender初始化各个点
击动作;

 

1

2

3

4

5

 

var ZR_EVENT_LISTENS = [

'CLICK', 'DBLCLICK', 'CONTEXTMENU', 'MOUSEOVER', 'MOUSEOUT',

'DRAGSTART', 'DRAGEND', 'DRAGENTER', 'DRAGOVER', 'DRAGLEAVE', 'DROP'

 

初始化构造函数中注册右击事件动作:

 

1

2

3

4

5

6

7

8

9

10

11

12

13

 

Echarts.prototype = {

_oncontextmenu: function (param) {

if (param.target) {

var ecData = this._eventPackage(param.target);

if (ecData && ecData.seriesIndex != null) {

this._messageCenter.dispatch(ecConfig.EVENT.CONTEXTMENU, param.event,

ecData, this);

}

}

}

}

 

3、页面添加右键事件
js中调用自定义的CONTEXTMENU事件:

 

1

2

3

4

5

6

7

8

9

10

11

 

var ec = require('echarts');

var chart = ec.init(document.getElementById("tree"));

chart.setOption(option);

//添加右击事件

var ecConfig = require('echarts/config');

chart.on(ecConfig.EVENT.CONTEXTMENU, showMenu);

function showMenu(param){

console.log('param===',param);

}

 

再看页面效果出现自定义右击效果;
4、屏蔽默认右键属性
在页面查看时,会发现默认的右击事件效果还在,还是会出现插件自带的右击事件,保存图片等;
所以需要先根据需求来屏蔽自带右键属性,再调用自定义实现定制右键特效;

 

1

2

3

4

5

6

 

var tree = document.getElementById("tree");

tree.oncontextmenu = function() {

return false;

};

 

这样一个基于echarts2版本的完整右击特效就实现了。

echarts3右键实现

熟悉官网echarts3的api可看到在对外开放给开发者的事件EVENT列表中,已将contextmenu事件开放,只需引用
on方法添加contextmenu事件即可实现自定义事件。
1、添加事件
使用on方法:

 

1

2

3

4

5

6

7

 

//新加上鼠标右击事件

myChart.on('contextmenu', showMenu);

function showMenu(param){

console.log('param===',param);

}

 

在看页面效果,出现自定义右击效果;
2、屏蔽默认右键属性
同样的问题,会发现默认的右击事件效果还在,还是会出现默认的右击事件,保存图片等;

 

1

2

3

4

5

6

 

//去除默认的鼠标事件

var tree = document.getElementById("tree");

tree.oncontextmenu = function() { return false; };

即可实现效果

 

示例实现
目标:右击显示一个自定义小菜单,触发右键动作展示自定义菜单,菜单出现位置随鼠点击的位置变化,鼠标移出
菜单区域时隐藏菜单;
右键特效:基于以上两种不同版本的实现方法,可以实现自定义的菜单;
菜单位置效果:打印鼠标的右击参数,点击获取的参数中的event提供一些基础的坐标属性;对于echarts2和3版本
获取坐标的参数位置与格式有所不同,需区别对待;部分参数如:type:”contextmenu”,offsetX:200,
offsetY:140等。
取鼠标右击的坐标offsetX,offsetY属性:

 

1

2

3

4

5

6

7

8

9

10

11

 

js:

function showMenu(param){

console.log('p==============',param);

var menu = document.getElementById("struct_menu");

var event = param.event;

menu.style.left = event.offsetX + 'px';

menu.style.top = event.offsetY + 20 + 'px';

menu.style.display = "block";

}

html:

 

 

    • 新建单位

 

 

 

 

1

 

 

 

1

 

以上方案,基本实现了目标中要求。方案中菜单隐藏依赖的是onMouseOver事件,但是当onMouseOver一直未触
发时,菜单的隐藏就会出现不会隐藏的问题,如何解决?
完善修改:添加点击事件主动隐藏菜单,当下一次点击事件触发时主动隐藏;

 

1

2

3

4

5

6

7

 

chart.on('click', hideMenu);

function hideMenu(param) {

var menu = document.getElementById("struct_menu");

menu.style.display = "none";

}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值