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代码
Dec 03 Javascript
javascript 学习笔记(八)javascript对象
Apr 12 Javascript
js实现选中页面文字将其分享到新浪微博
Nov 05 Javascript
JQuery.validate在ie8下不支持的快速解决方法
May 18 Javascript
需灵活掌握的Bootstrap预定义排版类 你精通吗?
Jun 20 Javascript
JS获取html元素的标记名实现方法
Oct 08 Javascript
详解easyui基于 layui.laydate日期扩展组件
Jul 18 Javascript
浅谈angularJS2中的界面跳转方法
Aug 31 Javascript
小程序实现五星点评效果
Nov 03 Javascript
vue element-ui读取pdf文件的方法
Nov 26 Javascript
vue实现点击出现操作弹出框的示例
Nov 05 Javascript
利用 Chrome Dev Tools 进行页面性能分析的步骤说明(前端性能优化)
Feb 24 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下通过exec获得计算机的唯一标识[CPU,网卡 MAC地址]
2011/06/09 PHP
PHP实现获取图片颜色值的方法
2014/07/11 PHP
php使用strip_tags()去除html标签仍有空白的解决方法
2016/07/28 PHP
PHP 多任务秒级定时器的实现方法
2018/05/13 PHP
php获取微信openid方法总结
2019/10/10 PHP
JavaScript中出现乱码的处理心得
2009/12/24 Javascript
JavaScript将XML转成JSON的方法
2015/03/12 Javascript
javascript中replace( )方法的使用
2015/04/24 Javascript
jQuery Ajax和getJSON获取后台普通json数据和层级json数据用法分析
2016/06/08 Javascript
基于JavaScript实现带数据验证和复选框的表单提交
2017/08/23 Javascript
AngularJS 仿微信图片手势缩放的实例
2017/09/28 Javascript
Nodejs中crypto模块的安全知识讲解
2018/01/03 NodeJs
浅谈Angular单元测试总结
2019/03/22 Javascript
[00:32]2018DOTA2亚洲邀请赛OpTic出场
2018/04/03 DOTA
[59:48]DOTA2-DPC中国联赛 正赛 VG vs Magma BO3 第一场 1月26日
2021/03/11 DOTA
Python深入学习之内存管理
2014/08/31 Python
Python实现将绝对URL替换成相对URL的方法
2015/06/28 Python
Python计算字符宽度的方法
2016/06/14 Python
教你用Type Hint提高Python程序开发效率
2016/08/08 Python
最近Python有点火? 给你7个学习它的理由!
2017/06/26 Python
Python中用post、get方式提交数据的方法示例
2017/09/22 Python
Python实现矩阵加法和乘法的方法分析
2017/12/19 Python
PyQt5每天必学之带有标签的复选框
2018/04/19 Python
Django实现分页功能
2018/07/02 Python
Python字符串匹配之6种方法的使用详解
2019/04/08 Python
Python日期时间Time模块实例详解
2019/04/15 Python
Python利用神经网络解决非线性回归问题实例详解
2019/07/19 Python
法律专业自我鉴定
2013/10/03 职场文书
2014年大班元旦活动方案
2014/02/26 职场文书
小学生个人先进事迹材料
2014/05/08 职场文书
公司年底活动方案
2014/08/17 职场文书
入党自传范文2015
2015/06/26 职场文书
企业内部管理控制:银行存款控制制度范本
2020/01/10 职场文书
vue中控制mock在开发环境使用,在生产环境禁用方式
2022/04/06 Vue.js
Ruby处理YAML和json数据
2022/04/18 Ruby
使用ICOM IC-R9500接收机同时测评十台收音机中波接收性能
2022/05/10 无线电