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 弹出新页面避免被浏览器、ad拦截的一种新方法
Apr 30 Javascript
jquery实现浮动的侧栏实例
Jun 25 Javascript
Jquery easyui开启行编辑模式增删改操作
Jan 14 Javascript
js enter键激发事件实例代码
Aug 17 Javascript
JS实现页面数据无限加载
Sep 13 Javascript
浅谈vue方法内的方法使用this的问题
Sep 15 Javascript
一些你可能不熟悉的JS知识点总结
Mar 15 Javascript
微信小程序bindinput与bindsubmit的区别实例分析
Apr 17 Javascript
JS实现的简单tab切换功能完整示例
Jun 20 Javascript
详解vue-router的Import异步加载模块问题的解决方案
May 13 Javascript
js实现微信聊天效果
Aug 09 Javascript
JS+CSS实现动态时钟
Feb 19 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 上一篇,下一篇文章实现代码与原理说明
2010/05/09 PHP
关于session在PHP5的配置文件中的详细设置参数说明
2011/04/20 PHP
用PHP实现Ftp用户的在线管理
2012/02/16 PHP
PHP实现绘制3D扇形统计图及图片缩放实例
2014/10/01 PHP
php中in_array函数用法探究
2014/11/25 PHP
PHP PDO fetch 模式各种参数的输出结果一览
2015/01/07 PHP
Laravel框架FormRequest中重写错误处理的方法
2019/02/18 PHP
PHP中localeconv()函数的用法
2019/03/26 PHP
javascript String 的扩展方法集合
2008/06/01 Javascript
NodeJS学习笔记之Http模块
2015/01/13 NodeJs
JavaScript实现页面5秒后自动跳转的方法
2015/04/16 Javascript
JS实现复制功能
2017/03/01 Javascript
浅谈angular2的http请求返回结果的subcribe注意事项
2017/03/01 Javascript
vue 之 css module的使用方法
2018/12/04 Javascript
基于Vue-Cli 打包自动生成/抽离相关配置文件的实现方法
2018/12/09 Javascript
微信小程序实现拨打电话功能的示例代码
2020/06/28 Javascript
详解vite+ts快速搭建vue3项目以及介绍相关特性
2021/02/25 Vue.js
微信小程序input抖动问题的修复方法
2021/03/03 Javascript
[48:22]VGJ.S vs VG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[49:12]完美世界DOTA2联赛PWL S2 Magma vs GXR 第二场 11.29
2020/12/02 DOTA
haskell实现多线程服务器实例代码
2013/11/26 Python
初步介绍Python中的pydoc模块和distutils模块
2015/04/13 Python
Python使用arrow库优雅地处理时间数据详解
2017/10/10 Python
修复CentOS7升级Python到3.6版本后yum不能正确使用的解决方法
2018/01/26 Python
Python3导入CSV文件的实例(跟Python2有些许的不同)
2018/06/22 Python
python数据预处理之数据标准化的几种处理方式
2019/07/17 Python
python 实现检验33品种数据是否是正态分布
2019/12/09 Python
django 前端页面如何实现显示前N条数据
2020/03/16 Python
HTML5中的Scoped属性使用实例
2014/04/23 HTML / CSS
Revolution Beauty美国官网:英国知名化妆品网站
2018/07/23 全球购物
The North Face北面美国官网:美国著名户外品牌
2018/09/15 全球购物
人力资源专员岗位职责
2014/01/30 职场文书
大学生职业生涯规划书
2014/03/14 职场文书
居委会个人对照检查材料思想汇报
2014/09/29 职场文书
奖学金个人总结
2015/03/04 职场文书
生产现场禁烟通知
2015/04/23 职场文书