话不多说,直接上代码,其中需要注意的一点是为menu添加position: absolute;属性,这个属性的意思是菜单采用绝对位置,可以保证右击后菜单出现在自己想要的位置,而不受其他元素的影响
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>菜单</title>
<style>
#menu{
display: none;
width: 50px;
border: solid black;
position: absolute;
background-color: aqua;
}
#list{
width: 50px;
}
</style>
</head>
<body>
<ol id="list" style="border: solid red;">
<li>列表1</li>
<li>列表2</li>
<li>列表3</li>
<li>列表4</li>
<li>列表5</li>
</ol>
<div id="message">
</div>
<!--
作者:1054733797@qq.com
时间:2018-11-05
描述:菜单选项
-->
<div id="menu">
<a href="#" onclick="alert('菜单一')">菜单一</a><br/>
<a href="#" onclick="alert('菜单二')">菜单二</a><br/>
<a href="#" onclick="alert('菜单三')">菜单三</a>
</div>
<script>
var menu = document.getElementById("menu");
var list = document.getElementById("list");
var message = document.getElementById("message");
//为list添加右击事件
list.oncontextmenu = function(e){
var e = e || window.event;
var x = e.clientX;
var y = e.clientY;
message.innerHTML = "x="+x+",y="+y;
menu.style.display = "block";
menu.style.left = x + "px";
menu.style.top = y + "px"
return false;
}
//为窗口添加点击事件,当点击list外的区域时,菜单消失
document.onclick = function(e){
var e = e || window.event;
menu.style.display = "none";
}
//点击菜单时取消冒泡事件
menu.onclick = function(e){
var e = e || window.event;
//IE中取消冒泡事件
//e.cancelBubble = true;
//其他浏览器取消冒泡事件
e.stopPropagation();
}
</script>
</body>
</html>