首页 > 其他分享 >js在指定div右键菜单 js限制div内使用鼠标右键功能

js在指定div右键菜单 js限制div内使用鼠标右键功能

时间:2022-09-19 12:25:03浏览次数:75  
标签:style 菜单 js cstCM 右键 div document event

 

最近在做一个小东西的时候需要在某一个元素上“右击”触发一个自定义菜单,通过自定义的菜单对右击的条目进行编辑。这就要求屏蔽默认的右键菜单

IE和FF下面的元素都有oncontextmenu这个方法,在FF下面只要通过event.preventDefault()方法就可以轻松实现这个效果。IE并不支持这个方法,在IE下面一般是通过触发方法后return false来实现阻止默认事件的。

通常我们使用阻止右键事件是在全局阻止,即在document层面就将右键拦截,现在我想要实现的效果是只在特定的区域阻止默认的右键事件,而其他区域并不影响。

通过实验我发现要是在IE下绑定的方法中return false后在document层面上可以实现阻止右键的默认行为。但是具体到某一个元素比如div,则失效。

最后通过查找手册发现,IE下的event对象有一个returnValue属性,如果将这个属性设置为false则不会触发默认的右键事件。类似如下:

代码如下:

event.returnValue = false;

只要加入这句就实现了我想要的效果。完整Demo代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>在某个元素上阻止鼠标右键默认事件DEMO</title>
<style>
body{font-size:12px; line-height:24px; font-family:Arial, Helvetica, sans-serif;}
#activeArea{width:300px;height:200px; background:#06C; color:#fff;}
#cstCM{ width:120px; background:#eee; border:1px solid #ccc; position:absolute; }
#cstCM ul{margin:0; padding:0;}
#cstCM ul li{ list-style:none;padding:0 10px; cursor:default;}
#cstCM ul li:hover{ background:#009; color:#fff;}
.splitTop{ border-bottom:1px solid #ccc;}
.splitBottom{border-top:1px solid #fff;}
</style>
<script>
function customContextMenu(event){
    event.preventDefault ? event.preventDefault():(event.returnValue = false);
    var cstCM = document.getElementById('cstCM');
    cstCM.style.left = event.clientX + 'px';
    cstCM.style.top = event.clientY + 'px';
    cstCM.style.display = 'block';
    document.onmousedown = clearCustomCM;
}
function clearCustomCM(){
    document.getElementById('cstCM').style.display = 'none';
    document.onmousedown = null;
}
</script>
</head>
 
<body>
<div id="cstCM" style="display:none;">
    <ul>
        <li>View</li>
        <li>Sort By</li>
        <li class="splitTop">Refresh</li>
        <li class="splitBottom">Paste</li>
        <li class="splitTop">Paste Shortcut</li>
        <li class="splitBottom">Property</li>
    </ul>
</div>
<div id="activeArea" oncontextmenu = "customContextMenu(event)">
    Custom Context Menu Area,在这个DIV才显示菜单
</div>
</body>
</html>

 

标签:style,菜单,js,cstCM,右键,div,document,event
From: https://www.cnblogs.com/q149072205/p/16707304.html

相关文章

  • div居中方法
    1.在父元素使用display:flex;justify-content:center;align-items:center其中justify-content是左右居中,align-items是上下居中......
  • 将div排成一列
    1.在子元素使用display:inline-block注意子元素宽度加上边距不能超过父元素宽度,否则就在下一行展示<style>#back{ border:redsolid1px; width:800px; ......
  • Node.js(五)学生管理CRUD
    npminit-y(初始化项目)npminstallexpress(引入express)npxexpress-generator-e(自动生成模板。添加对ejs模板引擎的支持)npmi--savelodash(引入lodash) app.js......
  • js数组sort()方法按指定顺序排序
    一、sort介绍数组的sort()方法可以把数组排序,不传参数的默认按字典排序sort()方法还接受一个回调函数,按回调函数内代码逻辑排序该函数要比较两个值,然后返回一个用于说明这......
  • Node.js(四)json
    npminit-y(初始化项目)npminstallexpress(引入express)npxexpress-generator-e(自动生成模板。添加对ejs模板引擎的支持)npmi--savelodash(引入lodash) 路由配......
  • 《js 设计模式与开发实践》读书笔记 13
     职责链模式的定义是:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系,将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。 ......
  • 《js 设计模式与开发实践》读书笔记 14(完)
    在传统面向对象语言中,给对象添加功能常常使用继承的方式,但是继承的方式并不灵活,还会带来许多问题:一方面会导致超类和子类之间存在强耦合性,当超类改变时,子类也会随之改变;另......
  • JOSN.parse、JSON.stringify深拷贝数据丢失问题(使用JSON深拷贝有哪些弊端)
    一个数组添加属性,深拷贝之后添加的数据丢失当数组添加一个对象,这个对象是不可枚举属性,使用JSON进行深拷贝,会丢失这个属性使用JSON.parse(JSON.stringify())进行深拷贝......
  • Js手写面试题第三天
    前言❓有任何疑问都可以私信我解答⚡仓库地址:​https://gitee.com/super_li_yu/jsexamdemo......
  • springboot中解析JSON参数
    解析psot请求中的JSON参数Map<String,String>attrMap=newHashMap<String,String>();BufferedReaderstreamReader=null;try{streamReader=newBufferedRead......