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 相关文章推荐
javascript 程序库的比较(一)之DOM功能
Apr 07 Javascript
js判断上传文件的类型和大小示例代码
Oct 18 Javascript
使用jquery 简单实现下拉菜单
Jan 14 Javascript
深入理解JavaScript系列(46):代码复用模式(推荐篇)详解
Mar 04 Javascript
jQuery操作基本控件方法实例分析
Dec 31 Javascript
JS中artdialog弹出框控件之提交表单思路详解
Apr 18 Javascript
微信小程序 合法域名校验出错详解及解决办法
Mar 09 Javascript
vue实现todolist功能、todolist组件拆分及todolist的删除功能
Apr 11 Javascript
layui 对table中的数据进行转义的实例
Sep 12 Javascript
ant-design-vue 快速避坑指南(推荐)
Jan 21 Javascript
vue element 关闭当前tab 跳转到上一路由操作
Jul 22 Javascript
浅析JavaScript 函数柯里化
Sep 08 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/10/09 PHP
PHP中cookies使用指南
2007/03/16 PHP
mysql_fetch_row,mysql_fetch_array,mysql_fetch_assoc的区别
2009/04/24 PHP
php学习之 认清变量的作用范围
2010/01/26 PHP
完善CodeIgniter在IDE中代码提示功能的方法
2014/07/19 PHP
利用PHP如何实现Socket服务器
2015/09/23 PHP
PHP的Yii框架的常用日志操作总结
2015/12/08 PHP
php扩展开发入门demo示例
2019/09/23 PHP
jQuery创建自己的插件(自定义插件)的方法
2010/06/10 Javascript
一个简单的js渐显(fadeIn)渐隐(fadeOut)类
2010/06/19 Javascript
判断浏览器的javascript版本的代码
2010/09/03 Javascript
JQuery插件Style定制化方法的分析与比较
2012/05/03 Javascript
JavaScript实现删除,移动和复制文件的方法
2015/08/05 Javascript
JavaScript控制浏览器全屏及各种浏览器全屏模式的方法、属性和事件
2015/12/20 Javascript
node简单实现一个更改头像功能的示例
2017/12/29 Javascript
React.js绑定this的5种方法(小结)
2018/06/05 Javascript
Canvas实现微信红包照片效果
2018/08/21 Javascript
webpack实践之DLLPlugin 和 DLLReferencePlugin的使用教程
2019/06/10 Javascript
JavaScript进阶(二)词法作用域与作用域链实例分析
2020/05/09 Javascript
Json实现传值到后台代码实例
2020/06/30 Javascript
解决Vue 移动端点击出现300毫秒延迟的问题
2020/07/21 Javascript
python实现简易版计算器
2020/06/22 Python
Python的argparse库使用详解
2018/10/09 Python
一篇文章彻底搞懂Python中可迭代(Iterable)、迭代器(Iterator)与生成器(Generator)的概念
2019/05/13 Python
python爬虫刷访问量 2019 7月
2019/08/01 Python
VScode连接远程服务器上的jupyter notebook的实现
2020/04/23 Python
pycharm 使用anaconda为默认环境的操作
2021/02/05 Python
基于 HTML5 Canvas实现 的交互式地铁线路图
2018/03/05 HTML / CSS
canvas 实现 github404动态效果的示例代码
2017/11/15 HTML / CSS
人力资源管理专业毕业生推荐信
2013/11/07 职场文书
庆祝教师节活动方案
2014/01/31 职场文书
银行求职信范文
2014/05/26 职场文书
关于爱国的标语
2014/06/24 职场文书
解除劳动关系协议书范文
2014/09/11 职场文书
考研导师推荐信范文
2015/03/27 职场文书
MySQL 5.7常见数据类型
2021/07/15 MySQL