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 08 Vue.js
vue使用exif获取图片旋转,压缩的示例代码
Dec 11 Vue.js
Vue——前端生成二维码的示例
Dec 19 Vue.js
vue中activated的用法
Jan 03 Vue.js
基于Vue2实现移动端图片上传、压缩、拖拽排序、拖拽删除功能
Jan 05 Vue.js
vue如何使用rem适配
Feb 06 Vue.js
vue仿携程轮播图效果(滑动轮播,下方高度自适应)
Feb 11 Vue.js
vue脚手架项目创建步骤详解
Mar 02 Vue.js
解决Vue+SpringBoot+Shiro跨域问题
Jun 09 Vue.js
简单聊聊Vue中的计算属性和属性侦听
Oct 05 Vue.js
vue使用refs获取嵌套组件中的值过程
Mar 31 Vue.js
Vue组件化(ref,props, mixin,.插件)详解
May 15 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&amp;mysql(四)
2006/10/09 PHP
php与XML、XSLT、Mysql的结合运用实现代码
2009/11/19 PHP
PHP中使用foreach和引用导致程序BUG的问题介绍
2012/09/05 PHP
php内嵌函数用法实例
2015/03/20 PHP
PHP实现的购物车类实例
2015/06/17 PHP
javascript dom追加内容实现示例
2013/09/21 Javascript
纯js写的分页表格数据为json串
2014/02/18 Javascript
javascript基于HTML5 canvas制作画箭头组件
2014/06/25 Javascript
js获取数组的最后一个元素
2015/04/14 Javascript
js两种拼接字符串的简单方法(必看)
2016/09/02 Javascript
js+css3制作时钟特效
2016/10/16 Javascript
基于jPlayer三分屏的制作方法
2016/12/21 Javascript
JavaScript实现自定义媒体播放器方法介绍
2017/01/03 Javascript
浅谈jQuery中事情的动态绑定
2017/02/12 Javascript
使用contextMenu插件实现Bootstrap table弹出右键菜单
2017/02/20 Javascript
vue.js数据绑定操作详解
2018/04/23 Javascript
JavaScript中常见内置函数用法示例
2018/05/14 Javascript
vue实现与安卓、IOS交互的方法
2018/11/02 Javascript
apicloud拉起小程序并传递参数的方法示例
2018/11/21 Javascript
element-ui组件table实现自定义筛选功能的示例代码
2019/03/15 Javascript
JavaScript find()方法及返回数据实例
2020/04/30 Javascript
vuex的使用步骤
2021/01/06 Vue.js
[00:38]TI珍贵瞬间系列(二):笑
2020/08/26 DOTA
Python保存MongoDB上的文件到本地的方法
2016/03/16 Python
Python引用计数操作示例
2018/08/23 Python
Python模块、包(Package)概念与用法分析
2019/05/31 Python
python数据预处理之数据标准化的几种处理方式
2019/07/17 Python
pycharm中显示CSS提示的知识点总结
2019/07/29 Python
HTML5边玩边学(3)像素和颜色
2010/09/21 HTML / CSS
党的群众路线教育实践活动剖析材料
2014/09/30 职场文书
贪污受贿检讨书范文
2014/11/19 职场文书
同意转租证明
2015/06/24 职场文书
导游词之山海关
2019/12/10 职场文书
如何使用Python提取Chrome浏览器保存的密码
2021/06/09 Python
Win11控制面板快捷键是什么?Win11打开控制面板的方法汇总
2022/07/07 数码科技
Promise静态四兄弟实现示例详解
2022/07/07 Javascript