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 相关文章推荐
pjblog修改技巧汇总
Mar 12 Javascript
基于jQuery.Validate验证库知识点的详解
Apr 26 Javascript
基于jquery插件实现常见的幻灯片效果
Nov 01 Javascript
jquery slibings选取同级其他元素的实现代码
Nov 15 Javascript
javascript模拟枚举的简单实例
Mar 06 Javascript
js鼠标悬浮出现遮罩层的方法
Jan 28 Javascript
JavaScript对数字的判断与处理实例分析
Feb 02 Javascript
jQuery动态添加
Apr 07 Javascript
JQuery的常用选择器、过滤器、方法全面介绍
May 25 Javascript
AngularJS实现动态编译添加到dom中的方法
Nov 04 Javascript
解决AngualrJS页面刷新导致异常显示问题
Apr 20 Javascript
javascript canvas实现雨滴效果
Jun 09 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中批量替换文件名的实现代码
2011/07/20 PHP
PHP+ajax分页实例简析
2015/12/07 PHP
Yii2中cookie用法示例分析
2016/07/18 PHP
php微信公众平台开发(一) 配置接口
2016/12/06 PHP
深入理解 PHP7 中全新的 zval 容器和引用计数机制
2018/10/15 PHP
PHP __call()方法实现委托示例
2019/05/20 PHP
Jquery 实现Tab效果 思路是js思路
2010/03/02 Javascript
IE6下CSS图片缓存问题解决方法
2010/12/09 Javascript
Js注册协议倒计时的小例子
2013/06/24 Javascript
表单序列化与jq中的serialize使用示例
2014/02/21 Javascript
js操纵dom生成下拉列表框的方法
2014/02/24 Javascript
node.js中的http.response.getHeader方法使用说明
2014/12/14 Javascript
AngularJS学习笔记之ng-options指令
2015/06/16 Javascript
JS实现浏览器状态栏显示时间的方法
2015/10/27 Javascript
JS组件Bootstrap dropdown组件扩展hover事件
2016/04/17 Javascript
JS弹出层遮罩,隐藏背景页面滚动条细节优化分析
2016/04/29 Javascript
使用jquery.form.js实现图片上传的方法
2016/05/05 Javascript
JS实现可编辑的后台管理菜单功能【附demo源码下载】
2016/09/13 Javascript
详解用原生JavaScript实现jQuery的某些简单功能
2016/12/19 Javascript
微信小程序三级联动选择器使用方法
2020/05/19 Javascript
vue 标签属性数据绑定和拼接的实现方法
2018/05/17 Javascript
vue2单元测试环境搭建
2018/05/24 Javascript
了解JavaScript函数中的默认参数
2019/05/30 Javascript
[01:31:02]TNC vs VG 2019国际邀请赛淘汰赛 胜者组赛BO3 第一场
2019/08/22 DOTA
通过数据库对Django进行删除字段和删除模型的操作
2015/07/21 Python
简介Python设计模式中的代理模式与模板方法模式编程
2016/02/02 Python
Python 实现微信防撤回功能
2019/04/29 Python
python 函数嵌套及多函数共同运行知识点讲解
2020/03/03 Python
印尼在线旅游门户网站:NusaTrip
2019/11/01 全球购物
学校火灾防控方案
2014/06/09 职场文书
领导干部作风整顿剖析材料
2014/10/11 职场文书
团委副书记工作总结
2015/08/14 职场文书
小学班级标语口号大全
2015/12/26 职场文书
中学语文教学反思
2016/02/16 职场文书
解析Java异步之call future
2021/06/14 Java/Android
基于Python实现对比Exce的工具
2022/04/07 Python