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与C#编码解码
Dec 03 Javascript
extjs 时间范围选择自动判断的实现代码
Jun 24 Javascript
javascript实现依次输入input自动定焦
Dec 23 Javascript
Angular中使用ui router实现系统权限控制及开发遇到问题
Sep 23 Javascript
微信小程序 教程之数据绑定
Oct 18 Javascript
微信小程序 loading(加载中提示框)实例
Oct 28 Javascript
Bootstrap基本组件学习笔记之下拉菜单(7)
Dec 07 Javascript
微信小程序 新建登录页并实现tabBar隐藏
Jun 13 Javascript
vuejs使用axios异步访问时用get和post的实例讲解
Aug 09 Javascript
node.js 如何监视文件变化
Sep 01 Javascript
解决vue初始化项目一直停在downloading template的问题
Nov 09 Javascript
react 路由Link配置详解
Nov 11 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横向重复区域显示二法
2008/09/25 PHP
Zend framework处理一个http请求的流程分析
2010/02/08 PHP
晋城吧对DiscuzX进行的前端优化要点
2010/09/05 PHP
PHP数据类型之布尔型的介绍
2013/04/28 PHP
php查找指定目录下指定大小文件的方法
2014/11/28 PHP
PHP创建word文档的方法(平台无关)
2016/03/29 PHP
PHP实现页面静态化的超简单方法
2016/09/06 PHP
php批量删除操作(数据访问)
2017/05/23 PHP
thinkphp集成前端脚手架Vue-cli的教程图解
2018/08/30 PHP
JS日历 推荐
2006/12/03 Javascript
jquery validate poshytip 自定义样式
2012/11/26 Javascript
触屏中的JavaScript事件分析
2015/02/06 Javascript
JQuery实现展开关闭层的方法
2015/02/17 Javascript
Vue.js计算属性computed与watch(5)
2016/12/09 Javascript
three.js绘制地球、飞机与轨迹的效果示例
2017/02/28 Javascript
vue组件间通信子与父详解(二)
2017/11/07 Javascript
详解如何在Vue项目中导出Excel
2019/04/19 Javascript
微信小程序非跳转式组件授权登录的方法示例
2019/05/22 Javascript
vue添加自定义右键菜单的完整实例
2020/12/08 Vue.js
[03:55]DOTA2完美大师赛选手传记——LFY.MONET
2017/11/18 DOTA
[01:21]2018DOTA2亚洲邀请赛4.5采访 打DOTA2也能有女朋友?
2018/04/06 DOTA
基于DataFrame改变列类型的方法
2018/07/25 Python
用python求一个数组的和与平均值的实现方法
2019/06/29 Python
python 设置xlabel,ylabel 坐标轴字体大小,字体类型
2019/07/23 Python
Python lambda表达式filter、map、reduce函数用法解析
2019/09/11 Python
树莓派极简安装OpenCv的方法步骤
2019/10/10 Python
Pycharm激活方法及详细教程(详细且实用)
2020/05/12 Python
Selenium 安装和简单使用的实现
2020/12/04 Python
CSS3的first-child选择器实战攻略
2016/04/28 HTML / CSS
Clarks英国官方网站:全球领军鞋履品牌
2016/11/26 全球购物
Hotter Shoes英国官网:英伦风格,舒适的鞋子
2017/12/28 全球购物
Champion澳大利亚官网:美国冠军运动服装
2018/05/07 全球购物
什么是封装
2013/03/26 面试题
2014年会计工作总结
2014/11/27 职场文书
同学聚会通知书
2015/04/20 职场文书
解决spring.thymeleaf.cache=false不起作用的问题
2022/06/10 Java/Android