阻止默认行为 和 定制鼠标右键菜单
原创
©著作权归作者所有:来自51CTO博客作者wg_iGBFcBFB的原创作品,请联系作者获取转载授权,否则将追究法律责任
<!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>
html,body{
height: 100%;
width: 100%;
}
.contextmenu{
position: fixed;
top: 0;
left: 0;
z-index: 999;
}
.contextmenu ul{
box-sizing: border-box;
width: 150px;
border: 1px solid #AAA;;
}
.contextmenu ul li{
height: 30px;
line-height: 30px;
padding: 0 5px;
cursor: pointer;
}
.contextmenu ul li:hover{
background: lightblue;
}
.box{
margin: 1500px auto;
width: 100px;
height: 100px;
background-color: lightcoral;
}
</style>
</head>
<body>
<!-- <div class="contextmenu">
<ul>
<li>跳转到首页</li>
<li>进入详情</li>
<li>逗你玩</li>
</ul>
</div> -->
<!-- <a href="#box" id="link">哈哈</a>
<div class="box" id="box"> </div> -->
<!-- 1 阻止默认行为 -->
<a href="javascript:;" >哈哈</a>
<a href="https://www.baidu.com/" id="link">哈哈</a>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.js"></script>
<script>
/**
* 默认行为:
*
* 可以基于 ev.prevetDefault() 来禁用默认行为
*/
/**
* a 标签的默认行为
* + 页面跳转
* + 锚点定位
* */
// 阻止默认行为
let link = document.getElementById('link');
link.onclick = function(ev){
ev.preventDefault();
// return false;
}
// 禁用右键菜单 (后续可以改为自己的菜单)
window.oncontextmenu = function(ev){
// 阻止默认行为 禁用自带右侧菜单
ev.preventDefault();
// console.log(ev);
// 没有右键菜单 则创建一个
let contextmenu = document.querySelector('.contextmenu');
if(!contextmenu){
contextmenu = document.createElement('div');
contextmenu.className = "contextmenu";
contextmenu.innerHTML = `
<ul>
<li>跳转到首页</li>
<li>进入详情</li>
<li>逗你玩</li>
</ul>
`;
document.body.appendChild(contextmenu);
}
// 控制右键菜单位置
contextmenu.style.left = `${ev.clientX + 10}px`;
contextmenu.style.top = `${ev.clientY + 10}px`;
}
// 点击其它内容(不包含contextmenu及里面的内容) 让右键菜单消失
window.onclick = function(ev){
let target = ev.target,
targetTag = target.tagName;
// 点击 contextmenu 不做任何处理
if(targetTag === 'LI'){
target = target.parentNode,
targetTag = target.tagName;
}
if(targetTag === 'UL' && target.parentNode.className === 'contextmenu'){
return;
}
// 移除右侧菜单
let contextmenu = document.querySelector('.contextmenu');
if(contextmenu){
document.body.removeChild(contextmenu);
}
}
</script>
</body>
</html>
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
有趣的CSS - 汉堡菜单按钮
用 css 实现汉堡菜单图标与关闭图标过渡动画交互效果。
css 汉堡图标 动画 ux 交互体验 -
阻止鼠标右键网站开发 JS脚本 前端开发
-
vue阻止浏览器右键默认行为
vue阻止浏览器右键默认行为
前端 修饰符 监听器 .net -
js阻止默认右键的下拉菜单
需求正常情况下,我们有可能遇到需要右键不显示下拉菜单的情况,
取消右键菜单 oncontextm 阻止默认 javascript 右键 -
windows定制右键菜单
1.发送到:C:\Users\树叶子\AppData\Roaming\Microsoft\Windows\SendTo目录下的为
windows操作系统管理右键菜单 右键菜单 右键 标签页