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实现随机验证码功能
Dec 29 Vue.js
vue3自定义dialog、modal组件的方法
Jan 04 Vue.js
vue3 watch和watchEffect的使用以及有哪些区别
Jan 26 Vue.js
vue浏览器返回监听的具体步骤
Feb 03 Vue.js
Vue单页面应用中实现Markdown渲染
Feb 14 Vue.js
vue中data改变后让视图同步更新的方法
Mar 29 Vue.js
vue+elementui 实现新增和修改共用一个弹框的完整代码
Jun 08 Vue.js
vue中控制mock在开发环境使用,在生产环境禁用方式
Apr 06 Vue.js
vue 数字翻牌器动态加载数据
Apr 20 Vue.js
vue生命周期钩子函数以及触发时机
Apr 26 Vue.js
vue/cli 配置动态代理无需重启服务的方法
May 20 Vue.js
Vue Mint UI mt-swipe的使用方式
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
PHPMailer邮件发送的实现代码
2013/05/04 PHP
PHP5.3安装Zend Guard Loader图文教程
2014/09/29 PHP
基于 Swoole 的微信扫码登录功能实现代码
2018/01/15 PHP
javascript 实用的文字链提示框效果
2010/06/30 Javascript
JQury slideToggle闪烁问题及解决办法
2011/07/05 Javascript
一个CSS+jQuery实现的放大缩小动画效果
2014/02/19 Javascript
用html+css+js实现的一个简单的图片切换特效
2014/05/28 Javascript
Jquery ui datepicker设置日期范围,如只能隔3天【实现代码】
2016/05/04 Javascript
使用jQuery制作浮动工具栏的实例分享
2016/05/13 Javascript
JS在onclientclick里如何控制onclick的执行
2016/05/30 Javascript
nodejs如何获取时间戳与时间差
2016/08/03 NodeJs
javascript按顺序加载运行js方法
2017/12/01 Javascript
JavaScript获取移动设备型号的实现代码(JS获取手机型号和系统)
2018/03/10 Javascript
jsonp跨域及实现百度首页联想功能的方法
2018/08/30 Javascript
Makefile/cmake/node-gyp中区分判断不同平台的方法
2018/12/18 Javascript
Vue实现点击按钮复制文本内容的例子
2019/11/09 Javascript
Python利用IPython提高开发效率
2016/08/10 Python
Python实现模拟分割大文件及多线程处理的方法
2017/10/10 Python
使用Python批量修改文件名的代码实例
2019/01/24 Python
python粘包问题及socket套接字编程详解
2019/06/29 Python
pycharm运行scrapy过程图解
2019/11/22 Python
记一次django内存异常排查及解决方法
2020/08/07 Python
python输入中文的实例方法
2020/09/14 Python
python 写一个文件分发小程序
2020/12/05 Python
利用css3制作3D样式按钮实现代码
2013/03/18 HTML / CSS
html5 button autofocus 属性介绍及应用
2013/01/04 HTML / CSS
英国女性化妆品收纳和家具网站:Beautify
2019/12/07 全球购物
Java的类与C++的类有什么不同
2014/01/18 面试题
医学院毕业生自荐信
2013/11/08 职场文书
土木工程毕业生自荐信
2013/11/12 职场文书
校园之声广播稿
2014/01/31 职场文书
十八届三中全会个人学习材料
2014/02/13 职场文书
2015年幼儿园卫生保健工作总结
2015/05/12 职场文书
甲午大海战观后感
2015/06/02 职场文书
《绝招》教学反思
2016/02/20 职场文书
解决Python字典查找报Keyerror的问题
2021/05/26 Python