原生js自定义右键菜单
本文实例为大家分享了js自定义右键菜单的具体代码,供大家参考,具体内容如下
1、右键菜单触发的基本过程
实现自定义右键菜单我们首先需要了解以下内容:
浏览器默认的右键菜单触发的基本过程
1)、单击右键,菜单出现
2)、菜单出现,鼠标箭头一直在菜单左上角
3)、再换个位置点击右键,原菜单消失,新菜单出现在指定位置
4)、点击左键,中键,菜单消失
以上为大致实现过程,不全面,仅供参考
也许文字过于抽象,我们来看看代码吧:
2、HTML结构
<!--start右键菜单的结构--> <div id="rightmenu" class="rightmenu"> <ul> <li disabled="disabled"> <a href="#" >返回(B)</a> <span>Alt+向左箭头</span></li> <li><a href="#" >前进(F)</a> <span>Alt+向右箭头</span></li> <li><a href="#" >重新加载(R)</a> <span>Ctrl+R</span></li> </ul> <ul> <li><a href="#" >另存为(A)...</a> <span>Ctrl+S</span></li> <li><a href="#" >打印(P)..</a> <span>Ctrl+P</span></li> <li><a href="#" >投射(C)...</a> <span>Ctrl+R</span></li> </ul> <ul> <li><a href="#" >查看你个锤代码(V)</a> <span>Ctrl+U</span></li> <li><a href="#" >检查你个瓜皮(N)</a> <span>Ctrl+Shift+L</span></li> </ul> </div> <!--end右键菜单的结构--> <div class="box"></div>
3、CSS样式
*{ margin: 0; padding: 0; } li{ list-style: none; } .rightmenu{ width: 250px; background: #fff; border: 1px solid #bababa; position: fixed; box-sizing: border-box; display: none; } .rightmenu ul{ border-bottom: 1px solid #e9e9e9; } .rightmenu ul li{ height: 30px; line-height: 30px; color: #000; padding: 0 25px; box-sizing: border-box; margin: 2px 0; cursor: default; } .rightmenu ul li:hover{ background: #ebebeb; } .rightmenu ul li a{ font-size: 12px; color: #000; cursor: default; text-decoration: none; } .rightmenu ul li span{ float: right; font-size: 12px; color: #000; } .box{ width: 100px; height: 100px; background: red; }
.rightmenu设置display:none是因为右键菜单本身是隐藏了因为点击了才出现,倘若不加这句,菜单会出现在页面的左上角。
3、js实现过程
分析:
①:浏览器本身就有右键菜单,我们也要做右键菜单,所以应当阻止浏览器的右键,这里可以用到preventDefault(),这个方法有着阻止默认事件的功能,科普一下,什么是默认事件:
例如: 点我可以知道这是可以跳转到百度的,所以是有个跳转时间的,这个事件我们没有去用js实现,他是默认的,所以称之为默认事件,同理,浏览器右键菜单。
②前面我们说了菜单出现,鼠标箭头一直在菜单左上角,这是怎么实现的呢,这涉及到event里面的事件发生坐标了,我们点击的位置就是我们右键点击事件发生的位置,可以用坐标来解释这个位置,clientX(事件发生点和可视区域的位置),offsetX(事件发生点和父级元素的位置),pageX(事件发生点和页面的位置),screenX(事件发生点和屏幕的位置),这里我们用offsetX/Y,因为我们是在BOW中点击,所以具体原因大家百度一下就直道了,我们还是看代码吧,代码里标注的很详细。
<script> document.addEventListener('DOMContentLoaded',function(){ //获取 var rightMenu=document.getElementById('rightmenu'); //1.首先将右键默认行为关闭 window.oncontextmenu=function(event){ event.preventDefault(); //2.设置右键行为 rightMenu.style.display="none";//重置已经block的菜单 rightMenu.style.display="block"; rightMenu.style.left=event.offsetX+'px'; rightMenu.style.top=event.offsetY+'px'; } //3.根据真实浏览器的右键来看左键是可以取消右键菜单的 document.onclick=function(event){ rightMenu.style.display="none"; } //4.功能并不完善,需要给每个li写BOM事件,这里暂时不写了 //5.仔细检查你会发现当右键在自己定义的右键菜单上时,会出现一点小情况,可以自己测试 }) </script>
以上仅供参考,更多的功能实现都是差不多的原理,好了,结束了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持猪先飞。
相关文章
- 本篇文章主要分享了通过window.navigator来判断浏览器及其版本信息的实例代码。具有一定的参考价值,下面跟着小编一起来看下吧...2017-01-23
- 这篇文章主要介绍了js如何实现浏览器打印功能,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下...2020-07-15
- 下面小编就为大家带来一篇利用JS实现点击按钮后图片自动切换的简单方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-10-25
- 作为前端,一直以来都知道HTTP劫持与XSS跨站脚本、CSRF跨站请求伪造。防御这些劫持最好的方法是从后端入手,前端能做的太少。而且由于源码的暴露,攻击者很容易绕过防御手段。但这不代表我们去了解这块的相关知识是没意义的,本文的许多方法,用在其他方面也是大有作用。...2021-05-24
- 那么今天我就用JavaScript代码来实现这个效果吧,那么首先介绍一下整个的思路,首先我们先将确定输入密码的位数,我的需求是5位,那么就用一个div标签包住5个input标签...2016-01-02
- 这篇文章主要为大家详细介绍了js实现上传图片及时预览的相关资料,具有一定的参考价值,感兴趣的朋友可以参考一下...2016-05-09
- 这篇文章主要为大家详细介绍了js+css实现回到顶部按钮back to top回到顶部按钮,感兴趣的小伙伴们可以参考一下...2016-03-03
- 这篇文章主要给大家介绍了关于Nest.js参数校验和自定义返回数据格式的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-28
- 这篇文章主要介绍了如何使用JavaScript实现“无缝滚动 自动播放”轮播图效果,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-08-20
- 这篇文章主要给大家介绍了一个关于JS正则匹配的踩坑记录,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-04-13
- 有时候我们需要屏蔽客户端的F12,以防菜鸟也可以随意修改我们的代码,也处于源码的保护等操作,这里就为大家分享一下常见的代码...2020-10-03
- 这篇文章主要为大家详细介绍了js实现列表按字母排序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-08-11
- 这篇文章主要介绍了node.js如何操作MySQL数据库,帮助大家更好的进行web开发,感兴趣的朋友可以了解下...2020-10-29
- 这篇文章主要介绍了基于JavaScript实现文字超出部分隐藏 的相关资料,需要的朋友可以参考下...2016-03-01
- 这篇文章主要介绍了js实现调用网络摄像头及常见错误处理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-07
- 这篇文章主要介绍了JS创建Tag标签的方法,结合具体实例形式分析了javascript动态操作页面HTML元素实现tag标签功能的步骤与相关操作技巧,需要的朋友可以参考下...2017-06-15
- 这篇文章主要为大家详细介绍了JS实现随机生成验证码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-09-06
- 这篇文章主要介绍了js组件SlotMachine实现图片切换效果制作抽奖系统的相关资料,需要的朋友可以参考下...2016-04-19
- 这次文章要给大家介绍的是node.JS md5加密中文与php结果不一致怎么办,不知道具体解决办法的下面跟小编一起来看看。 因项目需要,需要Node.js与PHP做接口调用,发现nod...2017-07-06
- 系统的学习了一下angularjs,发现angularjs的有些思想根php的模块smarty很像,例如数据绑定,filter。如果对smarty比较熟悉的话,学习angularjs会比较容易一点,这篇文章给大家介绍angularjs filter用法详解,感兴趣的朋友一起学习吧...2015-12-29