vue添加自定义右键菜单的完整实例


Posted in Vue.js onDecember 08, 2020

一、写原生方法

vue添加自定义右键菜单的完整实例

1.在所编辑的页面,需要添加右键菜单的元素,绑定contextmenu事件,如下:

<li
    v-for="item in resourceList"
    :key="item.id"
    @click="handleClickFolder(item)"
    @contextmenu.prevent="openMenu($event,item)"
   >
   ...
   </li>

2.在页面编写右键菜单内容:

<ul v-show="visible" :style="{left:left+'px',top:top+'px'}" class="contextmenu">
  <!-- <li v-if="rightClickItem.fileType==99" @click="handleClickFolder(rightClickItem)">打开</li>
  <li @click="handleDelete(rightClickItem)">删除</li>
  <li @click="handleDownloadFile(rightClickItem)" v-if="rightClickItem.fileType!=99">下载</li>
  <li @click="handlePreviewFile(rightClickItem)" v-if="rightClickItem.fileType!=99">预览</li>
  <li @click="handleUpdate(rightClickItem)">编辑</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, item) {
  this.rightClickItem = item;

  var x = e.pageX;
  var y = e.pageY;

  this.top = y;
  this.left = x;
  
  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);
}

.contextmenu li {
 margin: 0;
 padding: 7px 16px;
 cursor: pointer;
}

.contextmenu li:hover {
 background: #eee;
}

二、使用插件vue-context-menu

demo地址

github地址

安装:

npm install vue-contextmenu --save

引用:

import VueContextMenu from 'vue-contextmenu'
Vue.use(VueContextMenu)

使用:

<template>
<div id="app" @contextmenu="showMenu"
 style="width: 100px;height: 100px;margin-top: 20px;background: red;">
 <vue-context-menu :contextMenuData="contextMenuData"
  @savedata="savedata"
  @newdata="newdata"></vue-context-menu>
</div>
</template>
<script>
export default {
 name: 'app',
 data () {
 return {
  	// contextmenu data (菜单数据)
  contextMenuData: {
  // the contextmenu name(@1.4.1 updated)
  menuName: 'demo',
  // The coordinates of the display(菜单显示的位置)
  axis: {
   x: null,
   y: null
  },
  // Menu options (菜单选项)
  menulists: [{
   fnHandler: 'savedata', // Binding events(绑定事件)
   icoName: 'fa fa-home fa-fw', // icon (icon图标 )
   btnName: 'Save' // The name of the menu option (菜单名称)
  }, {
   fnHandler: 'newdata',
   icoName: 'fa fa-home fa-fw',
   btnName: 'New'
  }]
  }
 }
 },
 methods: {
 showMenu () {
  event.preventDefault()
  var x = event.clientX
  var y = event.clientY
  // Get the current location
  this.contextMenuData.axis = {
  x, y
  }
 },
 savedata () {
  alert(1)
 },
 newdata () {
  console.log('newdata!')
 }
 }
}
</script>

tip:有说不兼容ie的,具体没有测试

到此这篇关于vue添加自定义右键菜单的文章就介绍到这了,更多相关vue添加自定义右键菜单内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Vue.js 相关文章推荐
vue 插槽简介及使用示例
Nov 19 Vue.js
vue $router和$route的区别详解
Dec 02 Vue.js
解决Vue-cli3没有vue.config.js文件夹及配置vue项目域名的问题
Dec 04 Vue.js
Vue中computed和watch有哪些区别
Dec 19 Vue.js
vue 实现图片懒加载功能
Dec 31 Vue.js
vue+elementui通用弹窗的实现(新增+编辑)
Jan 07 Vue.js
vscode自定义vue模板的实现
Jan 27 Vue.js
vue项目两种方式实现竖向表格的思路分析
Apr 28 Vue.js
Vue实现动态查询规则生成组件
May 27 Vue.js
HTML+VUE分页实现炫酷物联网大屏功能
May 27 Vue.js
Vue3中的Refs和Ref详情
Nov 11 Vue.js
Vue组件更新数据v-model不生效的解决
Apr 02 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
详解Vue中的自定义指令
Dec 07 #Vue.js
You might like
php常用Stream函数集介绍
2013/06/24 PHP
php出现web系统多域名登录失败的解决方法
2014/09/30 PHP
php实现数组重复数字统计实例
2018/09/30 PHP
PHP7 windows支持
2021/03/09 PHP
用 JSON 处理缓存
2007/04/27 Javascript
JS实现随机数生成算法示例代码
2013/08/08 Javascript
JQuery中使用ajax传输超大数据的解决方法
2014/07/14 Javascript
jquery常用函数与方法汇总
2015/09/01 Javascript
Bootstrap Navbar Component实现响应式导航
2016/10/08 Javascript
浅谈使用splice函数对数组中的元素进行删除时的注意事项
2016/12/04 Javascript
Vue.js中兄弟组件之间互相传值实例
2017/06/01 Javascript
vue devtools的安装与使用教程
2018/08/08 Javascript
JavaScript函数apply()和call()用法与异同分析
2018/08/10 Javascript
Python中的匿名函数使用简介
2015/04/27 Python
Python 正则表达式实现计算器功能
2017/04/29 Python
200 行python 代码实现 2048 游戏
2018/01/12 Python
Python(Django)项目与Apache的管理交互的方法
2018/05/16 Python
Flask框架响应、调度方法和蓝图操作实例分析
2018/07/24 Python
Python HTML解析器BeautifulSoup用法实例详解【爬虫解析器】
2019/04/05 Python
Python获取当前脚本文件夹(Script)的绝对路径方法代码
2019/08/27 Python
Python 使用 prettytable 库打印表格美化输出功能
2019/12/26 Python
django 装饰器 检测登录状态操作
2020/07/02 Python
利用python如何实现猫捉老鼠小游戏
2020/12/04 Python
html5 sessionStorage会话存储_动力节点Java学院整理
2017/07/06 HTML / CSS
荷兰牛仔裤网上商店:Jeans Centre
2018/04/03 全球购物
来自Ocado的宠物商店:Fetch
2018/07/10 全球购物
澳大利亚玩具剧场:Toy Playhouse
2019/03/03 全球购物
六道php面试题附答案
2014/06/05 面试题
教师师德承诺书
2014/03/26 职场文书
改革共识倡议书
2014/08/29 职场文书
会计学习心得体会
2014/09/09 职场文书
幼儿园教师师德师风演讲稿:爱我所爱 无悔青春
2014/09/10 职场文书
单位授权委托书范本
2014/09/26 职场文书
因工资原因离职的辞职信范文
2015/05/12 职场文书
Python 内置函数速查表一览
2021/06/02 Python
java中重写父类方法加不加@Override详解
2021/06/21 Java/Android