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 24 Vue.js
在Vue中使用CSS3实现内容无缝滚动的示例代码
Nov 27 Vue.js
vue穿梭框实现上下移动
Jan 29 Vue.js
vue 数据双向绑定的实现方法
Mar 04 Vue.js
vue实现简单数据双向绑定
Apr 28 Vue.js
Vue接口封装的完整步骤记录
May 14 Vue.js
Vue和Flask通信的实现
May 19 Vue.js
vue+echarts实现多条折线图
Mar 21 Vue.js
vue 实现弹窗关闭后刷新效果
Apr 08 Vue.js
vue-treeselect的基本用法以及解决点击无法出现拉下菜单
Apr 30 Vue.js
vue router 动态路由清除方式
May 25 Vue.js
ant design vue的form表单取值方法
Jun 01 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自带的服务器来查看正则匹配结果的方法
2015/12/24 PHP
PHPExcel 修改已存在Excel的方法
2018/05/03 PHP
PHPUnit + Laravel单元测试常用技能
2019/11/06 PHP
让GoogleCode的SVN下的HTML文件在FireFox下正常显示.
2009/05/25 Javascript
javascript针对DOM的应用分析(三)
2012/04/15 Javascript
JS实现判断滚动条滚到页面底部并执行事件的方法
2014/12/18 Javascript
JavaScript中的逻辑判断符&amp;&amp;、||与!介绍
2014/12/31 Javascript
jQuery中prevAll()方法用法实例
2015/01/08 Javascript
AngularJS教程之环境设置
2016/08/16 Javascript
微信小程序 触控事件详细介绍
2016/10/17 Javascript
bootstrap fileinput完整实例分享
2016/11/08 Javascript
微信小程序 页面跳转和数据传递实例详解
2017/01/19 Javascript
AngularJs每天学习之总体介绍
2017/08/07 Javascript
从零开始最小实现react服务器渲染详解
2018/01/26 Javascript
微信小程序自定义tab实现多层tab嵌套功能
2018/06/15 Javascript
详解JavaScript原生封装ajax请求和Jquery中的ajax请求
2019/02/14 jQuery
Python实现多线程HTTP下载器示例
2017/02/11 Python
python在ubuntu中的几种安装方法(小结)
2017/12/08 Python
python读取文本绘制动态速度曲线
2018/06/21 Python
python实现ip地址的包含关系判断
2020/02/07 Python
Jupyter notebook设置背景主题,字体大小及自动补全代码的操作
2020/04/13 Python
Python 如何调试程序崩溃错误
2020/08/03 Python
用CSS3实现Win8风格的方格导航菜单效果
2013/04/10 HTML / CSS
英国演唱会订票网站:Ticket Selection
2018/03/27 全球购物
香港最大的洋酒零售连锁店:屈臣氏酒窖(Watson’s Wine)
2018/12/10 全球购物
日本必酷网络直营店:Biccamera
2019/03/23 全球购物
2014年小班元旦活动方案
2014/02/16 职场文书
财务部副经理岗位职责范本
2014/06/17 职场文书
销售助理岗位职责
2015/02/11 职场文书
支教个人总结
2015/03/04 职场文书
自荐信格式范文
2015/03/04 职场文书
自我评价优缺点范文
2015/03/11 职场文书
公司财务人员岗位职责
2015/04/14 职场文书
电影小兵张嘎观后感
2015/06/03 职场文书
导游词之上海杜莎夫人蜡像馆
2019/11/22 职场文书
提取视频中的音频 Python只需要三行代码!
2021/05/10 Python