javascript实现在某个元素上阻止鼠标右键事件的方法和实例


Posted in Javascript onAugust 12, 2014

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

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>
</body>
</html>

这个效果兼容IE6+,FF,但是opera压根就没有oncontextmenu这个方法所以也就不能简单的通过这个方法实现,要想实现还需要通过其他的手段。

Javascript 相关文章推荐
基于jquery的无缝循环新闻列表插件
Mar 07 Javascript
js常用代码段整理
Nov 30 Javascript
ie 7/8不支持trim的属性的解决方案
May 23 Javascript
js简单工厂模式用法实例
Jun 30 Javascript
原生javascript+css3编写的3D魔方动画旋扭特效
Mar 14 Javascript
js中动态创建json,动态为json添加属性、属性值的实例
Dec 02 Javascript
canvas仿iwatch时钟效果
Mar 06 Javascript
JS实现图片预览的两种方式
Jun 27 Javascript
微信小程序模版渲染详解
Jan 26 Javascript
微信小程序wx.navigateTo中events属性实现页面间通信传值,数据同步
Jul 13 Javascript
js设计模式之单例模式原理与用法详解
Aug 15 Javascript
wepy--用vantUI 实现上弹列表并选择相应的值操作
Nov 03 Javascript
JavaScript弹出窗口方法汇总
Aug 12 #Javascript
Javascript中3种实现继承的方法和代码实例
Aug 12 #Javascript
jQuery判断checkbox是否选中的3种方法
Aug 12 #Javascript
jquery判断浏览器后退时候弹出消息的方法
Aug 11 #Javascript
jQuery根据ID获取input、checkbox、radio、select的示例
Aug 11 #Javascript
JavaScript中跨域调用Flash的方法
Aug 11 #Javascript
jQuery实现的一个自定义Placeholder属性插件
Aug 11 #Javascript
You might like
基于PHP实现数据分页显示功能
2016/05/26 PHP
PHP实现通过二维数组键值获取一维键名操作示例
2019/10/11 PHP
javascript之ESC(第二类混淆)
2007/05/06 Javascript
js 页面执行时间计算代码
2009/03/04 Javascript
ASP中Sub和Function的区别说明
2020/08/30 Javascript
Three.js源码阅读笔记(光照部分)
2012/12/27 Javascript
事件委托与阻止冒泡阻止其父元素事件触发
2014/09/02 Javascript
JS访问SWF的函数用法实例
2015/07/01 Javascript
快速学习JavaScript的6个思维技巧
2015/10/13 Javascript
SpringMVC restful 注解之@RequestBody进行json与object转换
2015/12/10 Javascript
jQuery通过写入cookie实现更换网页背景的方法
2016/04/15 Javascript
jQuery Ajax传值到Servlet出现乱码问题的解决方法
2016/10/09 Javascript
JavaScript基于自定义函数判断变量类型的实现方法
2016/11/23 Javascript
js实现开启密码大写提示
2016/12/21 Javascript
JavaScript制作简易计算器(不用eval)
2017/02/05 Javascript
jQuery实用密码强度检测
2017/03/02 Javascript
令按钮悬浮在(手机)页面底部的实现方法
2017/05/02 Javascript
vue.js实现插入数值与表达式的方法分析
2018/07/06 Javascript
JavaScript引用类型Array实例分析
2018/07/24 Javascript
jQuery实现的鼠标拖动浮层功能示例【拖动div等任何标签】
2018/12/29 jQuery
详解element-ui中el-select的默认选择项问题
2019/08/02 Javascript
js实现点击生成随机div
2020/01/16 Javascript
vue实现编辑器键盘抬起时内容跟随光标距顶位置向上滚动效果
2020/05/28 Javascript
vue-calendar-component 封装多日期选择组件的实例代码
2020/12/04 Vue.js
Python安装Numpy和matplotlib的方法(推荐)
2017/11/02 Python
详解python3中用HTMLTestRunner.py报ImportError: No module named 'StringIO'如何解决
2019/08/27 Python
win10环境下配置vscode python开发环境的教程详解
2019/10/16 Python
python UIAutomator2使用超详细教程
2021/02/19 Python
教师求职自荐信
2014/03/09 职场文书
保险公司演讲稿
2014/09/02 职场文书
物业管理委托协议(2篇)
2014/09/23 职场文书
保研推荐信格式
2015/03/25 职场文书
初中班主任工作总结2015
2015/05/13 职场文书
民事答辩状格式范文
2015/05/21 职场文书
2015年教师节主持词
2015/07/03 职场文书
2016年共产党员公开承诺书
2016/03/24 职场文书