您当前的位置:首页 > 网站建设 > javascript
| php | asp | css | H5 | javascript | Mysql | Dreamweaver | Delphi | 网站维护 | 帝国cms | React | 考试系统 | ajax |

原生js自定义右键菜单

51自学网 2022-05-02 21:32:20
  javascript

本文实例为大家分享了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>

以上仅供参考,更多的功能实现都是差不多的原理,好了,结束了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持wanshiok.com。


Vue+Openlayer使用modify修改要素的完整代码
js实现炫酷的烟花效果
51自学网,即我要自学网,自学EXCEL、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。
京ICP备13026421号-1