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 相关文章推荐
使用JQuery进行跨域请求
Jan 25 Javascript
使用js解决由border属性引起的div宽度问题
Nov 26 Javascript
新增加的内容是如何将div的scrollbar自动移动最下面
Jan 02 Javascript
常规表格多表头查询示例
Feb 21 Javascript
jquery的幻灯片图片切换效果代码分享
Sep 07 Javascript
jQuery的内容过滤选择器学习教程
Apr 18 Javascript
js转html实体的方法
Sep 27 Javascript
详解Angular.js数据绑定时自动转义html标签及内容
Mar 30 Javascript
jQuery简介_动力节点Java学院整理
Jul 04 jQuery
mpvue性能优化实战技巧(小结)
Apr 17 Javascript
JS用最简单的方法实现四舍五入
Aug 27 Javascript
javascript中的相等操作符(==与===区别)
Dec 21 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面向对象的使用教程 简单数据库连接
2006/11/25 PHP
PHP常用处理静态操作类
2015/04/03 PHP
PHP实现的一致性哈希算法完整实例
2015/11/14 PHP
Laravel 集成 Geetest验证码的方法
2018/05/14 PHP
在JavaScript并非所有的一切都是对象
2013/04/11 Javascript
js下拉框二级关联菜单效果代码具体实现
2013/08/03 Javascript
JavaScript字符串对象fromCharCode方法入门实例(用于把Unicode值转换为字符串)
2014/10/17 Javascript
浅谈js的url解析函数封装
2016/06/28 Javascript
vue快捷键与基础指令详解
2017/06/01 Javascript
Bootstrap Table使用整理(五)之分页组合查询
2017/06/09 Javascript
es6数据变更同步到视图层的方法
2019/03/04 Javascript
vue+web端仿微信网页版聊天室功能
2019/04/30 Javascript
js实现随机8位验证码
2020/07/24 Javascript
layui实现根据table数据判断按钮显示情况的方法
2019/09/26 Javascript
mpvue 页面预加载新增preLoad生命周期的两种方式
2019/10/17 Javascript
webpack是如何实现模块化加载的方法
2019/11/06 Javascript
小程序表单认证布局及验证详解
2020/06/19 Javascript
使用PYTHON创建XML文档
2012/03/01 Python
pip 错误unused-command-line-argument-hard-error-in-future解决办法
2014/06/01 Python
详解Python中DOM方法的动态性
2015/04/11 Python
浅谈Python类的__getitem__和__setitem__特殊方法
2016/12/25 Python
Python tkinter的grid布局及Text动态显示方法
2018/10/11 Python
Python-Flask:动态创建表的示例详解
2019/11/22 Python
win10系统下python3安装及pip换源和使用教程
2020/01/06 Python
在tensorflow中设置使用某一块GPU、多GPU、CPU的操作
2020/02/07 Python
Python 改变数组类型为uint8的实现
2020/04/09 Python
意大利高端时尚买手店:Stefania Mode
2018/03/01 全球购物
安全员岗位职责
2013/11/11 职场文书
铁路工务反思材料
2014/02/07 职场文书
《小白兔和小灰兔》教学反思
2014/02/18 职场文书
优秀学生党员先进事迹材料
2014/05/29 职场文书
中秋节国旗下演讲稿
2014/09/05 职场文书
2015年酒店销售部工作总结
2015/07/24 职场文书
大学迎新生的欢迎词
2019/06/25 职场文书
教你用Python爬取英雄联盟皮肤原画
2021/06/13 Python
关于MySQL中explain工具的使用
2023/05/08 MySQL