js实现右键弹出自定义菜单


Posted in Javascript onSeptember 08, 2020

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

js声明部分:

//创建右键菜单
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样式定义部分:

.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;}

下面就是菜单的自定义调用部分了:

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、注意在创建自定义菜单之前一定要屏蔽系统默认的右键菜单,非常重要!!!

最后,这个简易的右键菜单功能还有点瑕疵,右键菜单弹出后,不进行菜单项点击操作,菜单不会自动关闭,后期有空再完善吧。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js GridView 实现自动计算操作代码
Mar 25 Javascript
深入解析contentWindow, contentDocument
Jul 04 Javascript
javascript判断两个IP地址是否在同一个网段的实现思路
Dec 13 Javascript
JavaScript 七大技巧(二)
Dec 13 Javascript
浅谈Angular的$q, defer, promise
Dec 20 Javascript
微信小程序 slider 详解及实例代码
Jan 10 Javascript
Bootstrap table表格简单操作
Feb 07 Javascript
详解如何在Vue2中实现组件props双向绑定
Mar 29 Javascript
vue.js简单配置axios的方法详解
Dec 13 Javascript
js实现小时钟效果
Mar 25 Javascript
js调用网络摄像头的方法
Dec 05 Javascript
js实现简单图片拖拽效果
Feb 22 Javascript
vue 使用原生组件上传图片的实例
Sep 08 #Javascript
使用js和canvas实现时钟效果
Sep 08 #Javascript
javascript使用canvas实现饼状图效果
Sep 08 #Javascript
vue配置多代理服务接口地址操作
Sep 08 #Javascript
全局安装 Vue cli3 和 继续使用 Vue-cli2.x操作
Sep 08 #Javascript
JS删除对象中某一属性案例详解
Sep 08 #Javascript
vue全局使用axios的操作
Sep 08 #Javascript
You might like
php中使用redis队列操作实例代码
2013/02/07 PHP
php定义数组和使用示例(php数组的定义方法)
2014/03/29 PHP
PHP版微信公众平台红包API
2015/04/02 PHP
JQuery文本框高亮显示插件代码
2011/04/02 Javascript
另一个javascript小测验(代码集合)
2011/07/27 Javascript
TextArea不支持maxlength的解决办法(jquery)
2011/09/13 Javascript
jquery()函数的三种语法介绍
2013/10/09 Javascript
alert和confirm功能介绍
2014/05/21 Javascript
JavaScript中使用typeof运算符需要注意的几个坑
2014/11/08 Javascript
JavaScript字符串常用类使用方法汇总
2015/04/14 Javascript
jQuery拖动元素并对元素进行重新排序
2015/12/30 Javascript
JavaScript代码里的判断小结
2016/08/22 Javascript
js+html5实现侧滑页面效果
2017/07/15 Javascript
Extjs 中的 Treepanel 实现菜单级联选中效果及实例代码
2017/08/22 Javascript
使用vue-cli创建项目的图文教程(新手入门篇)
2018/05/02 Javascript
BootStrap table实现表格行拖拽效果
2018/12/01 Javascript
浅谈javascript中的prototype和__proto__的理解
2019/04/07 Javascript
新手快速入门微信小程序组件库 iView Weapp
2019/06/24 Javascript
vue源码中的检测方法的实现
2019/09/26 Javascript
javascript实现简单打字游戏
2019/10/29 Javascript
nuxt.js写项目时增加错误提示页面操作
2020/11/05 Javascript
[01:31:22]Ti4 循环赛第四日附加赛LGD vs Mouz
2014/07/13 DOTA
Python的类实例属性访问规则探讨
2015/01/30 Python
python爬虫面试宝典(常见问题)
2018/03/02 Python
Ubuntu16.04/树莓派Python3+opencv配置教程(分享)
2018/04/02 Python
Python使用matplotlib绘制三维图形示例
2018/08/25 Python
对numpy中二进制格式的数据存储与读取方法详解
2018/11/01 Python
配置 Pycharm 默认 Test runner 的图文教程
2018/11/30 Python
python+pyqt5实现KFC点餐收银系统
2019/01/24 Python
python制作简单五子棋游戏
2019/06/18 Python
prAna官网:瑜伽、旅行和冒险服装
2019/03/10 全球购物
结构和类有什么异同
2012/07/16 面试题
大学生最常用的自我评价
2013/12/07 职场文书
大专学生求职信
2014/07/04 职场文书
委托书格式范文
2015/01/28 职场文书
Android基础入门之dataBinding的简单使用教程
2022/06/21 Java/Android