视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
JS如何实现自定义鼠标右击菜单
2020-11-27 15:26:05 责编:小采
文档
 这次给大家带来JS如何实现自定义鼠标右击菜单,JS实现自定义鼠标右击菜单的注意事项有哪些,下面就是实战案例,一起来看一下。

自定义鼠标右击菜单要素:

禁止页面默认右击事件

设置右击菜单的样式以及菜单出现的位置(通过捕获鼠标点击位置来确定菜单的位置)

鼠标在指定控件(区域)上右击时显示菜单(默认菜单隐藏,点击鼠标右键时显示)

效果图

代码如下:

HTML代码

<!DOCTYPE html>
<html>
<head>
 <meta charset="UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <meta http-equiv="X-UA-Compatible" content="ie=edge">
 <title>Document</title>
 <link rel="stylesheet" type="text/css" href="right-click.css" />
</head>
<body>
 <div id="contain-friend">右击显示菜单</div>
 <label id="label1"></label>
 <div id="menu-friend">
 <div>
 <button id="btn1">菜单一</button>
 </div>
 <div>
 <button id="btn2">菜单二</button>
 </div>
 </div>
 <script src="right-click.js"></script>
</body>
</html>

HTML

JS代码

  关于菜单的定位主要是在第一个if语句部分,后面为验证按钮效果。

  menu1.style.left和menu1.style.top用于对菜单进行定位,由css样式表可知menu1的position属性定位为absolute,style.top定位相对于离它最近的position属性值不为static的父辈元素,此处即为body。

  menu的位置需要根据页面布局的具体情况来判断是e.offsetX/Y、e.clientX/Y或是其它,此处加上document.documentElement.scrollTop是考虑加上滚动条的情况(实际上这个例子里面并没有滚动条)。

window.onload = function() {
 //以下为自定义右击菜单
 document.oncontextmenu = function(e) {
 //阻止执行浏览器默认右击事件
 e.preventDefault();
 //聊天室好友列表
 if (document.getElementById("menu-friend")) {
 var menu1 = document.getElementById("menu-friend");
 menu1.style.display = "block";
 document.getElementById("contain-friend").onmousedown = function(e) {      //菜单定位
 menu1.style.left = e.offsetX + "px";
 menu1.style.top = document.documentElement.scrollTop + e.clientY + "px";
 //alert(menu1.style.top)
 if (document.getElementById("contain-friend")) {
 if (e.button == 2) {
 menu1.style.visibility = "visible";
 } else {
 menu1.style.visibility = "hidden";
 }
 }
 }
 }
 }
 if (document.getElementById("btn1")) {
 document.getElementById("btn1").onmousedown = function(e) {
 document.getElementById("label1").innerHTML = "你点击了菜单一"
 }
 }
 if (document.getElementById("btn2")) {
 document.getElementById("btn2").onmousedown = function(e) {
 document.getElementById("label1").innerHTML = "你点击了菜单二"
 }
 }
 return false;
 //与e.preventDefault();功能相同,但是必须放在最后否则在return后面的内容均不执行
}

JavaScript文件

CSS样式表

1/*自定义右击菜单*/

.contain {
 background-color: #D1CEBC;
 height: 100px;
 width: 300px;
}
.menu {
 width: 150px;
 background-color: white;
 visibility: hidden;
 position: absolute;
 box-shadow: 0px 0px 10px #D1CEBC
}
.menu-item {
 background-color: #fff;
 margin: 0;
}
.menu-item-btn {
 width: 146px;
 margin: 2px;
 border: 0;
 text-align: left;
 padding-left: 60px;
 padding-top: 5px;
 padding-bottom: 5px;
 background-color: #fff;
 color: #000;
}
.menu-item-btn:hover {
 background-color: #D1CEBC;
}

相信看了这些案例你已经掌握了方法,更多精彩请关注Gxl网其它相关文章!

相关阅读:

HTML中关于盒模型的总结

html语义化有那些作用

HTML中移动端有哪些布局方案

input的文本框怎么做到和img验证码

下载本文
显示全文
专题