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中使用Echarts可视化库的完整步骤记录
Nov 18 Vue.js
vue打开其他项目页面并传入数据详解
Nov 25 Vue.js
如何实现vue的tree组件
Dec 03 Vue.js
Vue解决移动端弹窗滚动穿透问题
Dec 15 Vue.js
为什么推荐使用JSX开发Vue3
Dec 28 Vue.js
Vue看了就会的8个小技巧
Jan 21 Vue.js
vue打开新窗口并实现传参的图文实例
Mar 04 Vue.js
vue中利用mqtt服务端实现即时通讯的步骤记录
Jul 01 Vue.js
Vue提供的三种调试方式你知道吗
Jan 18 Vue.js
Vue中Object.assign清空数据报错的解决方案
Mar 03 Vue.js
vue-cli3.0修改打包后的文件名和文件地址,打包后本地运行报错解决
Apr 06 Vue.js
vue如何在data中引入图片的正确路径
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
zend framework多模块多布局配置
2011/02/26 PHP
php简单计算权重的方法示例【适合抽奖类应用】
2019/06/10 PHP
简明json介绍
2008/09/28 Javascript
JS面向对象、prototype、call()、apply()
2009/05/14 Javascript
JS 图片缩放效果代码
2010/06/09 Javascript
获取body标签的两种方法
2011/10/13 Javascript
js数组的操作详解
2013/03/27 Javascript
JavaScript中检查对象property的存在性方法介绍
2014/12/30 Javascript
JavaScript控制listbox列表框的项目上下移动的方法
2015/03/18 Javascript
jquery常用函数与方法汇总
2015/09/01 Javascript
Jquery ajax加载等待执行结束再继续执行下面代码操作
2015/11/24 Javascript
JQuery EasyUI的使用
2016/02/24 Javascript
微信小程序使用第三方库Underscore.js步骤详解
2016/09/27 Javascript
利用python分析access日志的方法
2016/10/26 Javascript
nodejs使用express获取get和post传值及session验证的方法
2017/11/09 NodeJs
vue+axios 前端实现的常用拦截的代码示例
2018/08/23 Javascript
webpack4+Vue搭建自己的Vue-cli项目过程分享
2018/08/29 Javascript
解决使用bootstrap的dropdown部件时报错:error:Bootstrap dropdown require Popper.js问题
2018/08/30 Javascript
js中int和string数据类型互相转化实例
2019/01/16 Javascript
JS实现TITLE悬停长久显示效果完整示例
2020/02/11 Javascript
vue.js实现双击放大预览功能
2020/06/23 Javascript
[48:05]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 VGJ.T vs VP
2018/03/31 DOTA
Python写入数据到MP3文件中的方法
2015/07/10 Python
Python基于PycURL自动处理cookie的方法
2015/07/25 Python
python交易记录链的实现过程详解
2019/07/03 Python
python如何将两张图片生成为全景图片
2020/03/05 Python
澳大利亚便宜的家庭购物网站:CrazySales
2018/02/06 全球购物
英国时尚首饰品牌:Missoma
2020/06/29 全球购物
解释下面关于J2EE的名词
2013/11/15 面试题
英语文学专业学生的自我评价
2013/10/31 职场文书
简历自我评价模版
2014/01/31 职场文书
学生抄袭作业的检讨书
2014/10/02 职场文书
晋江市人民政府党组群众路线教育实践活动整改方案
2014/10/25 职场文书
2015年第十五个全民国防教育日宣传活动方案
2015/05/06 职场文书
小学校本教研总结
2015/08/13 职场文书
PHP中国际化的字符串排序和比较对象详解
2021/08/23 PHP