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与C# Windows应用程序交互方法
Jun 29 Javascript
Javascript 函数对象的多重身份
Jun 28 Javascript
JQuery中SetTimeOut传参问题探讨
May 10 Javascript
js中的referrer返回上一页使用介绍
Sep 26 Javascript
页面图片浮动左右滑动效果的简单实现案例
Feb 10 Javascript
JavaScript中对象property的读取和写入方法介绍
Dec 30 Javascript
微信小程序 picker 组件详解及简单实例
Jan 10 Javascript
angular中使用Socket.io实例代码
Jun 03 Javascript
基于vue.js快速搭建图书管理平台
Oct 29 Javascript
实例分析vue循环列表动态数据的处理方法
Sep 28 Javascript
详解ES6 Fetch API HTTP请求实用指南
Nov 14 Javascript
详解一个基于react+webpack的多页面应用配置
Jan 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
《DOTA3》开发工作已经开始 《DOTA3》将代替《DOTA2》
2021/03/06 DOTA
让codeigniter与swfupload整合的最佳解决方案
2014/06/12 PHP
ThinkPHP调试模式与日志记录概述
2014/08/22 PHP
PHP设计模式之装饰者模式代码实例
2015/05/11 PHP
php解析url并得到url中的参数及获取url参数的四种方式
2015/10/26 PHP
laravel框架 laravel-admin上传图片到oss的方法
2019/10/13 PHP
Javascript解决常见浏览器兼容问题的12种方法
2010/01/04 Javascript
JS延迟加载(setTimeout) JS最后加载
2010/07/15 Javascript
原生JS实现表单checkbook获取已选择的值
2013/07/21 Javascript
jQuery实现简单的图片查看器
2020/09/11 Javascript
原生javascript实现分享到朋友圈功能 支持ios和android
2016/05/11 Javascript
jQuery通过ajax方法获取json数据不执行success的原因及解决方法
2016/10/15 Javascript
JS常见算法详解
2017/02/28 Javascript
Vue实现一个返回顶部backToTop组件
2017/07/25 Javascript
Javascript的console['']常用输入方法汇总
2018/04/26 Javascript
在Create React App中使用CSS Modules的方法示例
2019/01/15 Javascript
jQuery添加新内容的四个常用方法分析【append,prepend,after,before】
2019/03/19 jQuery
微信小程序实现的picker多级联动功能示例
2019/05/23 Javascript
jQuery Ajax async=>false异步改为同步时,解决导致浏览器假死的问题
2019/07/22 jQuery
layui问题之自动滚动二级iframe页面到指定位置的方法
2019/09/18 Javascript
推荐下python/ironpython:从入门到精通
2007/10/02 Python
Python下线程之间的共享和释放示例
2015/05/04 Python
基于Django用户认证系统详解
2018/02/21 Python
python爬取网页内容转换为PDF文件
2020/07/28 Python
Python 批量刷博客园访问量脚本过程解析
2019/08/30 Python
PyQt5 控件字体样式等设置的实现
2020/05/13 Python
css3实现小箭头各种图形效果
2020/07/08 HTML / CSS
使用canvas实现黑客帝国数字雨效果
2020/01/02 HTML / CSS
OSPREY LONDON官网:英国本土皮具品牌
2019/05/31 全球购物
android面试问题与答案
2016/12/27 面试题
通信工程专业女生个人求职信
2013/09/21 职场文书
《我的伯父鲁迅先生》教学反思
2014/02/12 职场文书
幼儿园毕业教师感言
2014/02/21 职场文书
节能标语大全
2014/06/21 职场文书
2015年科普工作总结
2015/07/23 职场文书
2016中学教师读书心得体会
2016/01/13 职场文书