近期在项目中有一个右键菜单的需求,发现很多实现都比较复杂,于是自己花了一点时间稍微研究了一下,下面提供一个简洁的实现方法。
js声明部分:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
//创建右键菜单
var epMenu={
create: function (point,option){
var menuNode=document.getElementById( 'epMenu' );
if (!menuNode){
//没有菜单节点的时候创建一个
menuNode=document.createElement( "div" );
menuNode.setAttribute( 'class' , 'epMenu' );
menuNode.setAttribute( 'id' , 'epMenu' );
} else $(menuNode).html( '' ); //清空里面的内容
$(menuNode).css({left:point.left+ 'px' ,top:point.top+ 'px' });
for ( var x in option){
var tempNode=document.createElement( "a" );
$(tempNode).text(option[x][ 'name' ]).on( 'click' ,option[x].action);
menuNode.appendChild(tempNode);
}
$( "body" ).append(menuNode);
},
destory: function (){
$( ".epMenu" ).remove();
}
};
function sayhello(){
alert( "hellokity" );
epMenu.destory();
}
function hideSysMenu() {
return false ;
}
|
css样式定义部分:
1
2
3
|
.epMenu{ width : 120px ; background : #f0f0f0 ; position : fixed ; left : 0 ; top : 0 ; box-shadow: 2px 2px 2px 2px #807878 ;}
.epMenu a{ display : block ; height : 25px ; line-height : 25px ; padding-left : 15px ; border-top : 1px solid #e0e0e0 ; border-bottom : 1px solid #fff ; font-family :微软雅黑; font-size : 14px ; cursor : default ;}
.epMenu a:hover{ background : #fff ;}
|
下面就是菜单的自定义调用部分了:
1
2
3
4
5
6
7
8
9
10
11
|
document.onmousedown = function (e){
var menuNode=document.getElementById( 'epMenu' );
if (e.button===2){
document.oncontextmenu = hideSysMenu; //屏蔽鼠标右键
var evt = window.event || arguments[0];
var rightedge = evt.clientX;
var bottomedge = evt.clientY;
epMenu.create({left:rightedge,top:bottomedge},[{name: 'a1' , 'action' :sayhello},{name: 'b2' , 'action' :sayhello},{name: 'c3' , 'action' :sayhello},{name: 'c4' , 'action' :sayhello}]);
}
// epMenu.destory();
}
|
简单解析一下:
1、epMenu.create方法的第一个参数是菜单弹出的位置坐标(距离屏幕左上角),这里用的是鼠标点击的坐标,菜单跟随鼠标点击弹出;第二个参数是一个json格式的数据,用于自定义菜单项,name是菜单项名字,action是点击菜单项后的动作(可以是函数,ajax请求等)。
2、e.button的值:2表示点击右键,0表示点击左键,4表示点击中键(ie),各浏览器的button值不同,此处仅以ie11作为参考。
3、注意在创建自定义菜单之前一定要屏蔽系统默认的右键菜单,非常重要!!!
最后,这个简易的右键菜单功能还有点瑕疵,右键菜单弹出后,不进行菜单项点击操作,菜单不会自动关闭,后期有空再完善吧。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/ttx_laughing/article/details/53322673