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-drawer-layout实现手势滑出菜单栏
Nov 19 Vue.js
vue使用exif获取图片经纬度的示例代码
Dec 11 Vue.js
Vue如何跨组件传递Slot的实现
Dec 14 Vue.js
vue实现图书管理系统
Dec 29 Vue.js
Vuex实现简单购物车
Jan 10 Vue.js
Vue过滤器,生命周期函数和vue-resource简单介绍
Jan 12 Vue.js
Vue 集成 PDF.js 实现 PDF 预览和添加水印的步骤
Jan 22 Vue.js
vue仿携程轮播图效果(滑动轮播,下方高度自适应)
Feb 11 Vue.js
Vue接口封装的完整步骤记录
May 14 Vue.js
详解Vue的sync修饰符
May 15 Vue.js
springboot+VUE实现登录注册
May 27 Vue.js
Vue vee-validate插件的简单使用
Jun 22 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
将OICQ数据转成MYSQL数据
2006/10/09 PHP
浅析PHP水印技术
2007/02/14 PHP
使用php判断服务器是否支持Gzip压缩功能
2013/09/24 PHP
php错误日志简单配置方法
2016/07/11 PHP
详解PHP实现定时任务的五种方法
2016/07/25 PHP
php中foreach结合curl实现多线程的方法分析
2016/09/22 PHP
TP框架实现上传一张图片和批量上传图片的方法分析
2020/04/23 PHP
javascript 装载iframe子页面,自适应高度
2009/03/20 Javascript
jQuery打印指定区域Html页面并自动分页
2014/07/04 Javascript
js电话号码验证方法
2015/09/28 Javascript
Bootstrap面板(Panels)的简单实现代码
2017/03/17 Javascript
angular4 如何在全局设置路由跳转动画的方法
2017/08/30 Javascript
vue项目中axios使用详解
2018/02/07 Javascript
纯js封装的ajax功能函数与用法示例
2018/05/14 Javascript
微信小程序时间控件picker view使用详解
2018/12/28 Javascript
JavaScript编写开发动态时钟
2020/07/29 Javascript
python里将list中元素依次向前移动一位
2014/09/12 Python
Python中绑定与未绑定的类方法用法分析
2016/04/29 Python
Python socket网络编程TCP/IP服务器与客户端通信
2017/01/05 Python
python smtplib模块实现发送邮件带附件sendmail
2018/05/22 Python
python得到qq句柄,并显示在前台的方法
2018/10/14 Python
Python小进度条显示代码
2019/03/05 Python
Python中生成一个指定长度的随机字符串实现示例
2019/11/06 Python
python中二分查找法的实现方法
2020/12/06 Python
英国领先的酒类网上商城:TheDrinkShop
2017/03/16 全球购物
美国性感内衣店:Yandy
2018/06/12 全球购物
如何提高JDBC的性能
2013/04/30 面试题
住宅使用说明书
2014/05/09 职场文书
干部职工纪律作风整改措施思想汇报
2014/10/11 职场文书
小学生作文评语集锦
2014/12/25 职场文书
辞职信怎么写
2015/02/27 职场文书
电力培训学习心得体会
2016/01/11 职场文书
标会主持词应该怎么写?
2019/08/15 职场文书
golang内置函数len的小技巧
2021/07/25 Golang
Python Flask搭建yolov3目标检测系统详解流程
2021/11/07 Python
vue.js 使用原生js实现轮播图
2022/04/26 Vue.js