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 相关文章推荐
javascript 命名规则 变量命名规则
Feb 25 Javascript
jQuery-ui中自动完成实现方法
Jun 10 Javascript
jquery-syntax动态语法着色示例代码
May 14 Javascript
纯前端JavaScript实现Excel IO案例分享
Aug 26 Javascript
JS实现重新加载当前页面
Nov 29 Javascript
微信小程序教程系列之新建页面(4)
Apr 17 Javascript
Cpage.js给组件绑定事件的实现代码
Aug 31 Javascript
Node.js实现发送邮件功能
Nov 06 Javascript
基于vue2.0实现简单轮播图
Nov 27 Javascript
layui layer select 选择被遮挡的解决方法
Sep 21 Javascript
Vue 3.0双向绑定原理的实现方法
Oct 23 Javascript
详解JS WebSocket断开原因和心跳机制
May 07 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开发微信支付的代码分享
2014/05/25 PHP
PHP生成plist数据的方法
2015/06/16 PHP
dojo 之基础篇
2007/03/24 Javascript
js调试工具 Javascript Debug Toolkit 2.0.0版本发布
2008/12/02 Javascript
js实现页面打印功能实例代码(附去页眉页脚功能代码)
2009/12/15 Javascript
JQuery 将元素显示在屏幕的中央的代码
2010/02/27 Javascript
Javascript中匿名函数的调用与写法实例详解(多种)
2016/01/26 Javascript
jQuery ajax分页插件实例代码
2016/01/27 Javascript
Bootstrap3 input输入框插入glyphicon图标的方法
2016/05/16 Javascript
关于Jquery中的事件绑定总结
2016/10/26 Javascript
js实现下一页页码效果
2017/03/07 Javascript
Vue.directive自定义指令的使用详解
2017/03/10 Javascript
使用Node.js实现简易MVC框架的方法
2017/08/07 Javascript
vue2.* element tabs tab-pane 动态加载组件操作
2020/07/19 Javascript
JavaScript 实现轮播图特效的示例
2020/11/05 Javascript
Python爬虫辅助利器PyQuery模块的安装使用攻略
2016/04/24 Python
python对离散变量的one-hot编码方法
2018/07/11 Python
Python的赋值、深拷贝与浅拷贝的区别详解
2020/02/12 Python
Python如何实现的二分查找算法
2020/05/27 Python
Python logging日志库空间不足问题解决
2020/09/14 Python
python批量提取图片信息并保存的实现
2021/02/05 Python
python pygame 愤怒的小鸟游戏示例代码
2021/02/25 Python
ZINVO手表官网:男士和女士手表
2019/03/10 全球购物
美国相机和电子产品零售商:Beach Camera
2020/11/26 全球购物
美国家居装饰店:Z Gallerie
2020/12/28 全球购物
入党自我评价范文
2014/02/02 职场文书
学生请假条格式
2014/04/11 职场文书
中国梦主题教育活动总结
2014/05/05 职场文书
食品安全承诺书
2014/05/22 职场文书
校运会口号
2014/06/18 职场文书
小学绿色学校申报材料
2014/08/23 职场文书
2014年营销工作总结
2014/11/22 职场文书
教师党员承诺书2015
2015/01/21 职场文书
绵山导游词
2015/02/05 职场文书
大学生毕业个人总结
2015/02/15 职场文书
幼儿园毕业典礼园长致辞
2015/07/29 职场文书