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 相关文章推荐
Valerio 发布了 Mootools
Sep 23 Javascript
尽可能写&quot;友好&quot;的&quot;Javascript&quot;代码
Jan 09 Javascript
Textarea根据内容自适应高度
Oct 28 Javascript
Jquery ajax执行顺序 返回自定义错误信息(实例讲解)
Nov 06 Javascript
jQuery根据用户电脑是mac还是pc加载对应样式的方法
Jun 26 Javascript
jQuery增加自定义函数的方法
Jul 18 Javascript
JS右下角广告窗口代码(可收缩、展开及关闭)
Sep 04 Javascript
简单掌握JavaScript中const声明常量与变量的用法
May 21 Javascript
Bootstrap modal使用及点击外部不消失的解决方法
Dec 13 Javascript
用move.js库实现百叶窗特效
Feb 08 Javascript
jQuery实现按比例缩放图片的方法
Apr 29 jQuery
Vue.js 的移动端组件库mint-ui实现无限滚动加载更多的方法
Dec 23 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
漫威DC即将合作联动,而双方早已经秘密开始
2020/04/09 欧美动漫
一些需要禁用的PHP危险函数(disable_functions)
2012/02/23 PHP
phpstorm 配置xdebug的示例代码
2019/03/31 PHP
prototype class详解
2006/09/07 Javascript
用js实现的抽象CSS圆角效果!!
2007/05/03 Javascript
JavaScript高级程序设计(第3版)学习笔记8 js函数(中)
2012/10/11 Javascript
文本有关的样式和jQuery求对象的高宽问题分别说明
2013/08/30 Javascript
Javascript实现页面跳转的几种方式分享
2013/10/26 Javascript
JavaScript中的函数模式详解
2015/02/11 Javascript
js实现遍历含有input的table实例
2015/12/07 Javascript
Vue.js实现无限加载与分页功能开发
2016/11/03 Javascript
详解ES6通过WeakMap解决内存泄漏问题
2018/03/09 Javascript
深入浅析Vue中的slots/scoped slots
2018/04/03 Javascript
详解Angular路由之路由守卫
2018/05/10 Javascript
layerUI下的绑定事件实例代码
2018/08/17 Javascript
Vue表单及表单绑定方法
2018/09/04 Javascript
vue项目中将element-ui table表格写成组件的实现代码
2019/06/12 Javascript
[23:21]Ti4 冒泡赛第二轮DK vs C9 2
2014/07/14 DOTA
[48:20]OpTic vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python优先队列实现方法示例
2017/09/21 Python
Python cookbook(数据结构与算法)保存最后N个元素的方法
2018/02/13 Python
Python实现插入排序和选择排序的方法
2019/05/12 Python
python3 property装饰器实现原理与用法示例
2019/05/15 Python
Python搭建Spark分布式集群环境
2019/07/05 Python
Python实现RGB与HSI颜色空间的互换方式
2019/11/27 Python
python关于变量名的基础知识点
2020/03/03 Python
python如何绘制疫情图
2020/09/16 Python
基于Jquery和Css3代码制作可以缩放的搜索框
2015/11/19 HTML / CSS
巴西网上药房:onofre
2016/11/21 全球购物
史上最全面的Java面试题汇总!
2015/02/03 面试题
应届生服装设计自我评价
2013/09/20 职场文书
求职信范文怎么写
2014/01/29 职场文书
应届大学生求职信
2014/07/20 职场文书
离婚起诉状范本
2015/05/19 职场文书
python文件名批量重命名脚本实例代码
2021/04/22 Python
Python数据结构之队列详解
2022/03/21 Python