前端自定义右键菜单(其余内容也可以)

概述:

整个过程主要分3个部分

  1. 设置想显示的内容(场景为菜单)
  2. 拦截右键默认的菜单
  3. 在预期位置显示
1.设置想显示的内容

在页面上定义想显示的内容

	<div id="rightMenu" class="rightMenu">
		<div class="item" @click="handleAddPoi">
			<span style="margin-left: 4px"> 热点</span>
		</div>
	</div>

定义CSS

.rightMenu {
	position: absolute;
    display:none;
	width: 120px;
	background: #fff;
	border-radius: 4px;
	box-shadow: 0 0 10px rgba(0, 0, 0, 0.2);
	z-index: 999;
}

重点有两点

  1. 设置position:absolute 目的是为了内容可以自定义位置
  2. display:none先不显示,vue可以用v-show之类的也可以
2.拦截右键菜单
	document.addEventListener('contextmenu', function (e) {
		showRightMenu(e); // 去显示自己定义的内容
		e.preventDefault(); // 阻止浏览器的默认右键菜单
	});

下狠手是直接拦截document,简单快捷,也可以按需,只拦截部分div,只需要获取到元素在拦截就可以

 const page = document.getElementById('page') as HTMLElement;
3.显示自己的内容
const showRightMenu = (e: any) => {
	console.log('showRightMenu', e);
	// if (rightMenuVisible.value) {
		// rightMenuVisible.value = false;
		// return;
	// }  
    // vue的代码,用于关闭,如果打开就关闭
    const menu = document.getElementById('rightMenu') as HTMLElement;
	menu.style.left = e.clientX + 'px';
	menu.style.top = e.clientY + 'px';
    menu.style.display="block" // 原生代码,显示
	// rightMenuVisible.value = true; // Vue代码显示 

};	


备注

有需要比如点下关闭,在点下打开,只要在显示里面加上判断当前状态的代码,如上图,先判断进行状态控制

  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值