近期在项目中有一个右键菜单的需求,发现很多实现都比较复杂,于是自己花了一点时间稍微研究了一下,下面提供一个简洁的实现方法。
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