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 相关文章推荐
js操作checkbox遇到的问题解决
Jun 29 Javascript
Jquery通过Ajax访问XML数据的小例子
Nov 18 Javascript
判断文档离浏览器顶部的距离的方法
Jan 08 Javascript
javascript类型转换示例
Apr 29 Javascript
javascript中call,apply,bind的用法对比分析
Feb 12 Javascript
JQuery选中checkbox方法代码实例(全选、反选、全不选)
Apr 27 Javascript
javascript每日必学之基础入门
Feb 16 Javascript
Bootstrap整体框架之CSS12栅格系统
Dec 15 Javascript
详解AngularJS ng-class样式切换
Jun 27 Javascript
webpack实用小功能介绍
Jan 02 Javascript
JavaScript实现简单轮播图效果
Dec 01 Javascript
vue使用混入定义全局变量、函数、筛选器的实例代码
Jul 29 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.MVC的模板标签系统(二)
2006/09/05 PHP
一个PHP针对数字的加密解密类
2014/03/20 PHP
深入理解PHP类的自动载入机制
2016/09/16 PHP
JavaScript中的getMilliseconds()方法使用详解
2015/06/10 Javascript
vue.js中$watch的用法示例
2016/10/04 Javascript
详谈js遍历集合(Array,Map,Set)
2017/04/06 Javascript
jsTree事件和交互以及插件plugins详解
2017/08/29 Javascript
原生JS与jQuery编写简单选项卡
2017/10/30 jQuery
vue轮播图插件vue-awesome-swiper
2017/11/27 Javascript
Angular2学习笔记之数据绑定的示例代码
2018/01/03 Javascript
详解如何制作并发布一个vue的组件的npm包
2018/11/10 Javascript
vue设置一开始进入的页面教程
2019/10/28 Javascript
Postman环境变量全局变量使用方法详解
2020/08/13 Javascript
Python中正则表达式的详细教程
2015/04/30 Python
举例讲解Python设计模式编程中对抽象工厂模式的运用
2016/03/02 Python
详解python string类型 bytes类型 bytearray类型
2017/12/16 Python
Python实现采用进度条实时显示处理进度的方法
2017/12/19 Python
Python决策树之基于信息增益的特征选择示例
2018/06/25 Python
Python数据结构之栈、队列及二叉树定义与用法浅析
2018/12/27 Python
python爬虫之快速对js内容进行破解
2019/07/09 Python
python 3.6.7实现端口扫描器
2019/09/04 Python
在pycharm中配置Anaconda以及pip源配置详解
2019/09/09 Python
Python Web静态服务器非堵塞模式实现方法示例
2019/11/21 Python
基于python实现学生信息管理系统
2019/11/22 Python
python3注册全局热键的实现
2020/03/22 Python
Django使用Profile扩展User模块方式
2020/05/14 Python
CSS3 实现穿梭星空动画
2020/11/13 HTML / CSS
英国第一蛋白粉品牌:Myprotein
2016/09/14 全球购物
美国体育用品商店:Paragon Sports
2017/10/08 全球购物
来自全球大都市的高级街头服饰:Pegador
2018/01/03 全球购物
美国轻奢时尚购物网站:REVOLVE(支持中文)
2020/07/18 全球购物
Three Graces London官网:英国奢侈品牌
2021/03/18 全球购物
如何写毕业求职自荐信
2013/11/06 职场文书
两年的个人工作自我评价
2014/01/10 职场文书
Spring Data JPA使用JPQL与原生SQL进行查询的操作
2021/06/15 Java/Android
《巫师》是美食游戏?CDPR10月将推出《巫师》官方食谱
2022/04/03 其他游戏