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统计录入文本框中字符的个数并加以限制不超过多少
May 23 Javascript
分享28款免费实用的 JQuery 图片和内容滑块插件
Dec 15 Javascript
分享一则JavaScript滚动条插件源码
Mar 03 Javascript
javascript中slice(),splice(),split(),substring(),substr()使用方法
Mar 13 Javascript
基于jQuery实现仿51job城市选择功能实例代码
Mar 02 Javascript
jQuery实现下拉加载功能实例代码
Apr 01 Javascript
JavaScript中 DOM操作方法小结
Apr 25 Javascript
Node.js安装配置图文教程
May 10 Javascript
原生js中ajax访问的实例详解
Sep 19 Javascript
在Bootstrap开发框架中使用dataTable直接录入表格行数据的方法
Oct 25 Javascript
JavaScript实现鼠标移入随机变换颜色
Nov 24 Javascript
详解Vue的sync修饰符
May 15 Vue.js
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
用Flash图形化数据(一)
2006/10/09 PHP
PHP 判断变量类型实现代码
2009/10/23 PHP
PHP开启gzip页面压缩实例代码
2010/03/11 PHP
php array_search() 函数使用
2010/04/13 PHP
成为好程序员必须避免的5个坏习惯
2014/07/04 PHP
Yii框架form表单用法实例
2014/12/04 PHP
php实现以只读方式打开文件的方法
2015/03/16 PHP
PHP中遇到的时区问题解决方法
2015/07/23 PHP
thinkphp如何获取客户端IP
2015/11/03 PHP
PHP实现的一致性哈希算法完整实例
2015/11/14 PHP
PHP+ajax分页实例简析
2015/12/07 PHP
PHP给源代码加密的几种方法汇总(推荐)
2018/02/06 PHP
PHP中迭代器的简单实现及Yii框架中的迭代器实现方法示例
2020/04/26 PHP
在textarea文本域中显示HTML代码的方法
2007/03/06 Javascript
20款效果非常棒的 jQuery 插件小结分享
2011/11/18 Javascript
一个关于javascript匿名函数的问题分析
2012/03/30 Javascript
Javascript算符的优先级介绍
2013/03/20 Javascript
javascript实现div浮动在网页最顶上并带关闭按钮效果实例
2013/08/13 Javascript
js实现微信分享代码
2020/10/11 Javascript
基于JavaScript实现通用tab选项卡(通用性强)
2016/01/07 Javascript
Vue+Mock.js模拟登录和表格的增删改查功能
2018/07/26 Javascript
vue生命周期与钩子函数简单示例
2019/03/13 Javascript
js验证身份证号码记录的方法
2019/04/26 Javascript
jquery插件懒加载的示例
2020/10/24 jQuery
[01:06]DOTA2亚洲邀请赛专属珍藏-荧煌之礼
2017/03/24 DOTA
[48:22]VGJ.S vs VG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python编程中的for循环语句学习教程
2015/10/14 Python
python机器学习实战之最近邻kNN分类器
2017/12/20 Python
利用Python校准本地时间的方法教程
2019/10/31 Python
母亲节感恩寄语
2014/02/21 职场文书
企业党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
义诊活动总结
2015/02/04 职场文书
2015年国庆节寄语
2015/08/17 职场文书
CSS中妙用 drop-shadow 实现线条光影效果
2021/11/11 HTML / CSS
浅谈Redis 中的过期删除策略和内存淘汰机制
2022/04/03 Redis
pytorch分类模型绘制混淆矩阵以及可视化详解
2022/04/07 Python