现在很多WEB项目都有右键自定义菜单,覆盖浏览器右键功能,用以实现一部分自定义功能。
本文将展示使用原生JavaScript
实现一个简单的自定义右键菜单,没有太多文字,主要看代码及注释即可,最后有个简单的总结。
提示:可以自己新建个html文件,将下方代码复制填写到该文件中,浏览器打开该文件即可查看代码效果。
html<!DOCTYPE html>
<html>
<head>
<title>Right-click menu example</title>
<style type="text/css">
/* css */
#manager-menu {
display: none;
position: absolute;
background-color: #393737;
border: 1px solid #ccc;
padding: 5px;
border-radius: 5px;
z-index: 9999; /* make sure it appears on top of other elements */
}
.menu {
text-align: center;
padding: 0.5rem 1.5rem 0.5rem 1rem;
cursor: pointer;
margin: 0.1rem;
color: #FFF;
border-radius: 5px;
}
.menu:hover{
background: #939393;
}
.click-me {
text-align: center;
background-color: #96d296;
padding: 1rem;
cursor: pointer;
}
</style>
</head>
<body>
<!-- 要实现右键自定义菜单的元素 -->
<div class="click-me" id="click-me">右键点我</div>
<!-- 右键菜单,默认是隐藏的(详情查看上方的css) -->
<div id="manager-menu">
<div class="menu" id="menu1">菜单1</div>
<div class="menu" id="menu2">菜单2</div>
</div>
<script type="text/javascript">
// 获取需要实现右键菜单的元素
var clickDiv = document.getElementById("click-me");
// 获取右键菜单元素
var rightClickMenu = document.getElementById("manager-menu");
// 给clickDiv设置右键(contextmenu)监听
clickDiv.addEventListener('contextmenu', function(e) {
// 禁用默认的右键行为
e.preventDefault();
// 保存当前右键点击的元素的id属性,以便后续业务使用
window.localStorage.setItem("clickId", e.target.id);
// 使用定位跟随鼠标显示右键菜单元素
rightClickMenu.style.display = "block";
rightClickMenu.style.left = e.pageX + "px";
rightClickMenu.style.top = e.pageY + "px";
});
// 给整个dom页面设置点击(左键)事件
document.addEventListener('click', function() {
// 隐藏(关闭)右键菜单
rightClickMenu.style.display = "none";
// 移除右键时保存的元素id
window.localStorage.removeItem("clickId");
});
// 获取右键菜单中的"菜单1"元素
var menu1 = document.getElementById("menu1");
// 给菜单1设置点击事件,弹出相关信息
menu1.addEventListener('click', function() {
alert('You clicked :' + window.localStorage.getItem("clickId") + ' and menu1');
});
</script>
</body>
</html>
要想实现一个优秀的 Web
网站自定义右键菜单,有几个关键点:
根据这几个关键点,可以总结出右键自定义菜单的几个主要部分:
show
),如示例代码中的 class="click-me"
div。hidden
),一般是整个dom元素,如示例中的一样。id="manager-menu"
div。show
元素监听右键,编写菜单出现时的逻辑,尤其注意定位问题、参数传递问题,如示例中的 // 给clickDiv设置右键(contextmenu)监听
部分代码。hidden
元素监听左键,编写菜单隐藏的逻辑,如示例中的 // 给整个dom页面设置点击(左键)事件
部分代码。// 获取右键菜单中的"菜单1"元素
部分代码。特别注意:要注意这些代码的执行顺序,本文示例中的部分顺序可以打乱,但如果你是通过 js
动态添加(append
)的菜单元素DIV,要特别注意!
如果你觉得本文对你有用,想要给作者一些赞助,可以动动小手点击下方广告给予支持,万分感谢~
您的每次点击都能给予作者更多分享的动力!请无情点击吧:
本文作者:DingDangDog
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!