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 相关文章推荐
文本域中换行符的替换示例
Mar 04 Javascript
jquery用offset()方法获得元素的xy坐标
Sep 06 Javascript
js+csss实现的一个带复选框的下拉框
Sep 29 Javascript
AngularJS中实现用户访问的身份认证和表单验证功能
Apr 21 Javascript
JS实现获取当前URL和来源URL的方法
Aug 24 Javascript
自己封装的一个简单的倒计时功能实例
Nov 23 Javascript
JS正则表达式修饰符global(/g)用法分析
Dec 27 Javascript
Vue-cli proxyTable 解决开发环境的跨域问题详解
May 18 Javascript
详解AngularJS ng-class样式切换
Jun 27 Javascript
Node.js中使用mongoose操作mongodb数据库的方法
Sep 12 Javascript
iview日期控件,双向绑定日期格式的方法
Mar 15 Javascript
解决vue项目获取dom元素宽高总是不准确问题
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
JavaScript 定义function的三种方式小结
2009/10/16 Javascript
ExtJS 学习专题(一) 如何应用ExtJS(附实例)
2010/03/11 Javascript
Mootools 图片展示插件(lightbox,ImageMenu)收集集合
2010/05/21 Javascript
一个关于jqGrid使用的小例子(行按钮)
2011/11/04 Javascript
js局部刷新页面时间具体实现
2013/07/04 Javascript
js日期对象兼容性的处理方法
2014/01/28 Javascript
jQueryMobile之Helloworld与页面切换的方法
2015/02/04 Javascript
学习javascript面向对象 实例讲解面向对象选项卡
2016/01/04 Javascript
微信小程序 网络请求(GET请求)详解
2016/11/16 Javascript
JavaScript 网页中实现一个计算当年还剩多少时间的倒数计时程序
2017/01/25 Javascript
angular.js + require.js构建模块化单页面应用的方法步骤
2017/07/19 Javascript
javascript实现文字无缝滚动效果
2017/08/26 Javascript
关于express与koa的使用对比详解
2018/01/25 Javascript
Nodejs实现用户注册功能
2019/04/14 NodeJs
20个必会的JavaScript面试题(小结)
2019/07/02 Javascript
解决mui框架中switch开关通过js控制开或者关状态时小圆点不动的问题
2019/09/03 Javascript
layui问题之渲染数据表格时,仅出现10条数据的解决方法
2019/09/12 Javascript
vue-cli2与vue-cli3在一台电脑共存的实现方法
2019/09/25 Javascript
[45:52]2018DOTA2亚洲邀请赛 4.1小组赛 A组加赛 LGD vs Liquid
2018/04/02 DOTA
[02:07]TI9显影之尘系列 - Vici Gaming
2019/08/20 DOTA
Python 正则表达式的高级用法
2016/12/04 Python
详解python之配置日志的几种方式
2017/05/22 Python
Python爬取数据并写入MySQL数据库的实例
2018/06/21 Python
python自动生成model文件过程详解
2019/11/02 Python
python deque模块简单使用代码实例
2020/03/12 Python
IntelliJ 中配置 Anaconda的过程图解
2020/06/01 Python
python+requests接口自动化框架的实现
2020/08/31 Python
Python urllib库如何添加headers过程解析
2020/10/05 Python
如何在 Matplotlib 中更改绘图背景的实现
2020/11/26 Python
土耳其时尚购物网站:Morhipo
2017/09/04 全球购物
马来西亚网上美容店:Hermo.my
2017/11/25 全球购物
《邮票齿孔的故事》教学反思
2014/02/22 职场文书
2014审计局领导班子民主生活会对照检查材料思想汇报
2014/09/20 职场文书
2015医德医风个人工作总结
2015/04/02 职场文书
公司年会开场白
2015/06/01 职场文书
地道战观后感400字
2015/06/04 职场文书