<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
#menu {
position: fixed;
border: 1px solid #ccc;
box-shadow: 0px 2px 3px 0px #888;
background-color: white;
border-radius: 3px;
display: none;
outline: none;
}
ul {
list-style: none;
margin: 0;
padding: 0;
}
li {
padding: 5px 15px;
cursor: pointer;
}
#menu li:hover {
background-color: #e1e1e1;
}
</style>
</head>
<body>
<!-- 创建一个菜单 -->
<div id="menu" tabindex="-1">
<ul>
<li>复制</li>
<li>剪切</li>
<li>粘贴</li>
<li>保存</li>
<li>另存为</li>
<li>关闭</li>
</ul>
</div>
<script>
const menu = document.getElementById('menu');
document.oncontextmenu = document_contextmenu;
//关闭菜单:当菜单失去焦点时。
//但是不是所有的元素都有焦点的概念。
//tabindex属性,原本是用来控制tab切换焦点顺序的。把它附加到一个没有焦点概念的元素上时
//可以使得这个元素有焦点概念。
menu.onblur = menu_blur;
function document_contextmenu(e) {
//先阻止与右键关联的默认动作
e.preventDefault();
//获取事件发生时,鼠标的偏移值,让自定义菜单移动到这个位置
menu.style.left = e.clientX + 'px';
menu.style.top = e.clientY + 'px';
//显示出来
menu.style.display = 'block';
//让菜单获得焦点
menu.focus();
}
function menu_blur() {
menu.style.display = 'none';
}
</script>
</body>
</html>