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 相关文章推荐
如何在标题栏显示框架内页面的标题
Feb 03 Javascript
锋利的jQuery jQuery中的DOM操作
Mar 21 Javascript
JavaScript 语言的递归编程
May 18 Javascript
使用Jquery搭建最佳用户体验的登录页面之记住密码自动登录功能(含后台代码)
Jul 10 Javascript
web的各种前端打印方法之jquery打印插件PrintArea实现网页打印
Jan 09 Javascript
jquery制作居中遮罩层效果分享
Feb 21 Javascript
Vue.js组件使用开发实例教程
Nov 01 Javascript
jquery.validate表单验证插件使用详解
Jun 21 jQuery
jQuery使用ajax_动力节点Java学院整理
Jul 05 jQuery
一些你可能不熟悉的JS知识点总结
Mar 15 Javascript
vue实现axios图片上传功能
Aug 20 Javascript
详解JavaScript 高阶函数
Sep 14 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中uploaded_files函数使用方法详解
2011/03/09 PHP
PHP安装GeoIP扩展根据IP获取地理位置及计算距离的方法
2016/07/01 PHP
PHP filesize函数用法浅析
2019/02/15 PHP
用JavaScript 处理 URL 的两个函数代码
2007/08/13 Javascript
DOM 基本方法
2009/07/18 Javascript
动态样式类封装JS代码
2009/09/02 Javascript
Jquery多选下拉列表插件jquery multiselect功能介绍及使用
2013/05/24 Javascript
jQuery function的正确书写方法
2013/08/02 Javascript
nodejs实现黑名单中间件设计
2014/06/17 NodeJs
jQuery中offsetParent()方法用法实例
2015/01/19 Javascript
JavaScript实现更改网页背景与字体颜色的方法
2015/02/02 Javascript
简介AngularJS的视图功能应用
2015/06/17 Javascript
基于Vuejs框架实现翻页组件
2020/06/29 Javascript
JS批量替换内容中关键词为超链接
2017/02/20 Javascript
深入理解Commonjs规范及Node模块实现
2017/05/17 Javascript
基于JS实现前端压缩上传图片的实例代码
2019/05/14 Javascript
js实现拖拽元素选择和删除
2020/08/25 Javascript
用python实现批量重命名文件的代码
2012/05/25 Python
Python字符串中查找子串小技巧
2015/04/10 Python
vue.js实现输入框输入值内容实时响应变化示例
2018/07/07 Python
pytorch中tensor的合并与截取方法
2018/07/26 Python
Python实现拷贝/删除文件夹的方法详解
2018/08/29 Python
django开发post接口简单案例,获取参数值的方法
2018/12/11 Python
Pyqt5 实现跳转界面并关闭当前界面的方法
2019/06/19 Python
基于Tensorflow使用CPU而不用GPU问题的解决
2020/02/07 Python
python求numpy中array按列非零元素的平均值案例
2020/06/08 Python
python实现图书馆抢座(自动预约)功能的示例代码
2020/09/29 Python
HTML5的video标签的浏览器兼容性增强方案分享
2016/05/19 HTML / CSS
佳能英国官方网站:Canon UK
2017/08/08 全球购物
Nike俄罗斯官方网站:Nike RU
2021/03/05 全球购物
解释一下抽象方法和抽象类
2016/08/27 面试题
企业门卫岗位职责
2013/12/12 职场文书
二手书店创业计划书
2014/01/16 职场文书
简单租房协议书范本
2014/08/20 职场文书
纪检监察立案决定书
2015/06/24 职场文书
宣传部部长竞选稿
2015/11/21 职场文书