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用mixin合并重复代码的实现
Nov 27 Vue.js
vuex页面刷新导致数据丢失的解决方案
Dec 10 Vue.js
基于Vue2实现移动端图片上传、压缩、拖拽排序、拖拽删除功能
Jan 05 Vue.js
vue.js watch经常失效的场景与解决方案
Jan 07 Vue.js
基于VUE实现简单的学生信息管理系统
Jan 13 Vue.js
vue如何使用rem适配
Feb 06 Vue.js
vue3中的组件间通信
Mar 31 Vue.js
Vue全家桶入门基础教程
May 14 Vue.js
Vue组件更新数据v-model不生效的解决
Apr 02 Vue.js
Vue.Draggable实现交换位置
Apr 07 Vue.js
vue实现可以快进后退的跑马灯组件
Apr 08 Vue.js
vue项目配置sass及引入外部scss文件
Apr 14 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中将数组转成XML格式的实现代码
2011/08/08 PHP
php爬取天猫和淘宝商品数据
2018/02/23 PHP
PHP的mysqli_sqlstate()函数讲解
2019/01/23 PHP
javascript动态添加样式(行内式/嵌入式/外链式等规则)
2013/06/24 Javascript
详解JavaScript中undefined与null的区别
2014/03/29 Javascript
一个简单的jquery的多选下拉框(自写)
2014/05/05 Javascript
JavaScript自学笔记(必看篇)
2016/06/23 Javascript
五步轻松实现JavaScript HTML时钟效果
2020/03/25 Javascript
利用JQUERY实现多个AJAX请求等待的实例
2017/12/14 jQuery
JavaScript常见事件对象与操作实例总结
2019/01/05 Javascript
浅谈VUE防抖与节流的最佳解决方案(函数式组件)
2019/05/22 Javascript
通过jQuery学习js类型判断的技巧
2019/05/27 jQuery
将RGB值转换为灰度值的简单算法
2019/10/09 Javascript
[44:09]DOTA2上海特级锦标赛A组小组赛#1 EHOME VS MVP.Phx第二局
2016/02/25 DOTA
[02:09]EHOME夺得首届辉夜杯冠军—现场颁奖仪式
2015/12/28 DOTA
Python 时间处理datetime实例
2008/09/06 Python
Python实现的手机号归属地相关信息查询功能示例
2017/06/08 Python
Python中工作日类库Busines Holiday的介绍与使用
2017/07/06 Python
Python使用ConfigParser模块操作配置文件的方法
2018/06/29 Python
Scrapy框架使用的基本知识
2018/10/21 Python
Python在图片中插入大量文字并且自动换行
2019/01/02 Python
python3中eval函数用法使用简介
2019/08/02 Python
Django rstful登陆认证并检查session是否过期代码实例
2019/08/13 Python
opencv 获取rtsp流媒体视频的实现方法
2019/08/23 Python
Python如何访问字符串中的值
2020/02/09 Python
使用Python解析Chrome浏览器书签的示例
2020/11/13 Python
Fairyseason:为个人和批发商提供女装和配件
2017/03/01 全球购物
职称自我鉴定
2013/10/15 职场文书
怎样写好自我评价呢?
2014/02/16 职场文书
专科生就业求职信
2014/06/22 职场文书
小学趣味运动会加油稿
2014/09/25 职场文书
观看《信仰》心得体会
2016/01/15 职场文书
各类场合主持词开场白范文集锦
2019/08/16 职场文书
低端且暴利的线上线下创业项目分享
2019/09/03 职场文书
html实现随机点名器的示例代码
2021/04/02 Javascript
k-means & DBSCAN 总结
2021/04/27 Python