Vue+element-ui添加自定义右键菜单的方法示例


Posted in Vue.js onDecember 08, 2020

1、在所编辑的页面,需要添加右键菜单的元素,绑定contextmenu事件

<template>
<el-button size="medium"  @contextmenu.prevent.native="openMenu($event)">
......
</template>

2、在页面编写右键菜单内容

<ul v-show="visible" :style="{left:left+'px',top:top+'px'}" class="contextmenu">
   <li>上移一层</li>
   <li>下移一层</li>
 </ul>

3、在data()中定义需要的变量属性

data() { 
	return {
			visible: false,
			top: 0,
			left: 0
	}
}

4、观察visible的变化,来触发关闭右键菜单,调用关闭菜单的方法

watch: {
  visible(value) {
   if (value) {
    document.body.addEventListener('click', this.closeMenu)
   } else {
    document.body.removeEventListener('click', this.closeMenu)
   }
  }
 },

5、在method中定义打开右键菜单和关闭右键菜单的两个方法

openMenu(e) {
   const menuMinWidth = 105
   const offsetLeft = this.$el.getBoundingClientRect().left // container margin left
   const offsetWidth = this.$el.offsetWidth // container width
   const maxLeft = offsetWidth - menuMinWidth // left boundary
   const left = e.clientX - offsetLeft // 15: margin right

   if (left > maxLeft) {
    this.left = maxLeft
   } else {
    this.left = left
   }

   this.top = e.clientY - 60 // fix 位置bug
   this.visible = true
  },
  closeMenu() {
   this.visible = false
  }

6、在style中写右键菜单的样式

.contextmenu {
  margin: 0;
  background: #fff;
  z-index: 3000;
  position: absolute;
  list-style-type: none;
  padding: 5px 0;
  border-radius: 4px;
  font-size: 12px;
  font-weight: 400;
  color: #333;
  box-shadow: 2px 2px 3px 0 rgba(0, 0, 0, 0.3);
  li {
   margin: 0;
   padding: 7px 16px;
   cursor: pointer;
   &:hover {
    background: #eee;
   }
  }
 }

注意:.native修饰符对vue组件元素监听原生事件有效,对原生的html元素使用,反而没有效果。

到此这篇关于Vue+element-ui添加自定义右键菜单的文章就介绍到这了,更多相关Vue+element-ui添加自定义右键菜单内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Vue.js 相关文章推荐
Vue实现购物小球抛物线的方法实例
Nov 22 Vue.js
Vue实现指令式动态追加小球动画组件的步骤
Dec 18 Vue.js
vue3.0中友好使用antdv示例详解
Jan 05 Vue.js
vue实现防抖的实例代码
Jan 11 Vue.js
vue+element table表格实现动态列筛选的示例代码
Jan 14 Vue.js
Vue 集成 PDF.js 实现 PDF 预览和添加水印的步骤
Jan 22 Vue.js
使用vue3重构拼图游戏的实现示例
Jan 25 Vue.js
如何封装Vue Element的table表格组件
Feb 06 Vue.js
vue中利用mqtt服务端实现即时通讯的步骤记录
Jul 01 Vue.js
Vue3.0中Ref与Reactive的区别示例详析
Jul 07 Vue.js
Vue的列表之渲染,排序,过滤详解
Feb 24 Vue.js
vue @ ~ 相对路径 路径别名设置方式
Jun 05 Vue.js
vue添加自定义右键菜单的完整实例
Dec 08 #Vue.js
vue中如何自定义右键菜单详解
Dec 08 #Vue.js
基于vue与element实现创建试卷相关功能(实例代码)
Dec 07 #Vue.js
vue祖孙组件之间的数据传递案例
Dec 07 #Vue.js
在vue中动态修改css其中一个属性值操作
Dec 07 #Vue.js
在vue中使用inheritAttrs实现组件的扩展性介绍
Dec 07 #Vue.js
vue中利用three.js实现全景图的完整示例
Dec 07 #Vue.js
You might like
php画图实例
2014/11/05 PHP
实现PHP+Mysql无限分类的方法汇总
2015/03/02 PHP
jquery中获得$.ajax()事件返回的值并添加事件的方法
2010/04/15 Javascript
javascript模拟select,jselect的方法实现
2012/11/08 Javascript
jQery使网页在显示器上居中显示适用于任何分辨率
2014/06/09 Javascript
浅谈Javascript Base64 加密解密
2014/12/28 Javascript
js计算任意值之间随机数的方法
2015/01/16 Javascript
jQuery中scrollTop()方法用法实例
2015/01/16 Javascript
tuzhu_req.js 实现仿百度图片首页效果
2015/08/11 Javascript
jQuery仅用3行代码实现的显示与隐藏功能完整实例
2015/10/08 Javascript
如何消除inline-block属性带来的标签间间隙
2016/03/31 Javascript
深入浅出ES6之let和const命令
2016/08/25 Javascript
BootStrap下拉菜单和滚动监听插件实现代码
2016/09/26 Javascript
spirngmvc js传递复杂json参数到controller的实例
2018/03/29 Javascript
jQuery实现的电子时钟效果完整示例
2018/04/28 jQuery
微信小程序中this.data与this.setData的区别详解
2018/09/17 Javascript
解决在Vue中使用axios用form表单出现的问题
2019/10/30 Javascript
使用 Github Actions 自动部署 Angular 应用到 Github Pages的方法
2020/07/20 Javascript
原生js实现放大镜组件
2021/01/22 Javascript
详解python3实现的web端json通信协议
2016/12/29 Python
Python实现求笛卡尔乘积的方法
2017/09/16 Python
让Python更加充分的使用Sqlite3
2017/12/11 Python
Tensorflow使用支持向量机拟合线性回归
2018/09/07 Python
Python docx库用法示例分析
2019/02/16 Python
华为校园招聘上机笔试题 扑克牌大小(python)
2020/04/22 Python
python科学计算之numpy——ufunc函数用法
2019/11/25 Python
Python实现ElGamal加密算法的示例代码
2020/06/19 Python
加拿大品牌鞋包连锁店:Little Burgundy
2021/02/28 全球购物
必须要使用游标的SQL语句有那些
2012/05/07 面试题
幼儿园春季开学寄语
2014/04/03 职场文书
劳资协议书范本
2014/04/23 职场文书
班级旅游计划书
2014/05/03 职场文书
乡镇一岗双责责任书
2015/01/29 职场文书
如何利用STAR法则制作留学文书?
2019/08/26 职场文书
导游词之山西祁县乔家大院
2019/10/14 职场文书
开发微信小程序之WXSS样式教程
2022/04/18 HTML / CSS