js屏蔽鼠标右键默认事件以实现自定义菜单

2017-12-18日,2017年即将结束的日子里。

公司做了一个项目,主要难点在于实现公司组织架构图上,何谓组织架构图,如下便是:



这里的每个节点都有相应的右键菜单,说白了就跟你用xmind的体验是一样的,用户体验自然是很好的,毕竟开发了都接近一个礼拜,而且还要加班。

做公司项目嘛,就要求快,首先就是先在网上找现成的呗,最开始找的是OrgChart,可是它对数据格式的要求十分严格,增删节点的体验也并不是很好,样式也不算太好看。所以对它进行重写和新增功能是必然的,很不巧这任务落到我头上来了。

改写OrgChart过程中,遇到了很多自己记得不太清楚的知识,做项目的时候直接花十几分钟在网上就可以找到解决方案。但是我不是太放心,都做了详细记录,现在就回过头来把遇到的问题再捋一遍,加深一下记忆!

上面都是故事背景,反正是我的博客,阅读量也就这么点,干脆破罐子破摔,我想怎么写就怎么写,想写什么就写什么。以前的博客基本上就是一个问题+对应解决方案,多少伸手党拿了代码就直接走了,评论都没有一个。我又何必在乎这些人的感受呢,支持都是相互的!

第一个问题是:用js实现自定义鼠标右键菜单功能

要实现这个,首先必须屏蔽掉鼠标右键的默认事件,这里的利用的“oncontextmenu”事件,该事件在用户右击鼠标时触发并打开上下文菜单。所以代码自然就出来了:

<!DOCTYPE html>
<html>

	<head>
		<meta charset="UTF-8">
		<title>鼠标右键事件</title>
		<style>
			* {
				padding: 0;
				margin: 0;
			}
			
			#tar {
				height: 60px;
				width: 220px;
				background-color: #888888;
				text-align: center;
				line-height: 60px;
			}
			
			#menu {
				display: none;
				position: absolute;
				background-color: #FF0000;
				z-index: 2;
			}
			
			#menu ul li {
				list-style: none;
			}
		</style>
	</head>

	<body>

		<p id="tar">这里是一些内容
			<menu id="menu">
				<ul>
					<li>选项1</li>
					<li>选项2</li>
					<li>选项3</li>
				</ul>
			</menu>
		</p>

		<script>
			window.onload = function() {
				var el = document.getElementById("tar");
				var oMenu = document.getElementById("menu");

				el.oncontextmenu = function(e) {
					//左键--button属性=1,右键button属性=2
					if(e.button == 2) {
						e.preventDefault();

						var _x = e.clientX,
							_y = e.clientY;

						oMenu.style.display = "block";
						oMenu.style.left = _x + "px";
						oMenu.style.top = _y + "px";
					}
				}

			}
		</script>
	</body>

</html>

代码大概就是这样子的,顺便做了一个在合适的位置出现菜单的操作。

然后呢,目前在火狐、谷歌和IE9以上都是OK的!所以屏蔽鼠标右键事件暂时就先写到这了。

喔,附张效果图,没图的话会有很大困扰:








  • 13
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 13
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值