vue中如何自定义右键菜单详解


Posted in Vue.js onDecember 08, 2020

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

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

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

<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>

在data()中定义需要的变量属性

data() { 
 return {
 visible: false,
 top: 0,
 left: 0
 }
}

观察visible的变化,来触发关闭右键菜单,调用关闭菜单的方法

watch: {
 visible(value) {
 if (value) {
 document.body.addEventListener('click', this.closeMenu)
 } else {
 document.body.removeEventListener('click', this.closeMenu)
 }
 }
 }

在method中定义打开右键菜单和关闭右键菜单的两个方法

openMenu(e, item) {
 this.rightClickItem = item;

 let x = e.clientX;
 let y = e.clientY;

 this.top = y;
 this.left = x;
 
 this.visible = true;
 },
 closeMenu() {
 this.visible = false;
 }

在style中写右键菜单的样式

.contextmenu {
 margin: 0;
 background: #fff;
 z-index: 3000;
 position: fixed;
 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-color: rgb(3, 125, 243);;
 color: white;
}

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

Vue.js 相关文章推荐
vue中音频wavesurfer.js的使用方法
Feb 20 Vue.js
vue 使用class创建和清除水印的示例代码
Dec 25 Vue.js
vue实现防抖的实例代码
Jan 11 Vue.js
基于VUE实现简单的学生信息管理系统
Jan 13 Vue.js
Vue如何实现变量表达式选择器
Feb 18 Vue.js
Vue SPA 首屏优化方案
Feb 26 Vue.js
Vue项目中如何封装axios(统一管理http请求)
May 02 Vue.js
Vue+Element UI实现概要小弹窗的全过程
May 30 Vue.js
一篇文章告诉你如何实现Vue前端分页和后端分页
Feb 18 Vue.js
vue如何使用模拟的json数据查看效果
Mar 31 Vue.js
vue 把二维或多维数组转一维数组
Apr 24 Vue.js
vue.js 使用原生js实现轮播图
Apr 26 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
vue-router定义元信息meta操作
Dec 07 #Vue.js
You might like
利用Ffmpeg获得flv视频缩略图和视频时间的代码
2011/09/15 PHP
php实现的支持断点续传的文件下载类
2014/09/23 PHP
PHP合并静态文件详解
2014/11/14 PHP
PHP加密3DES报错 Call to undefined function: mcrypt_module_open() 如何解决
2016/04/17 PHP
ExtJS4 组件化编程,动态加载,面向对象,Direct
2011/05/12 Javascript
JS调用CS里的带参方法实例
2013/08/01 Javascript
使用js实现关闭js弹出层的窗口
2014/02/10 Javascript
node.js实现逐行读取文件内容的代码
2014/06/27 Javascript
jQuery on()方法绑定动态元素的点击事件实例代码浅析
2016/06/16 Javascript
Vue表单实例代码
2016/09/05 Javascript
通过网页查看JS源码中汉字显示乱码的解决方法
2016/10/26 Javascript
JS判断两个对象内容是否相等的方法示例
2017/04/10 Javascript
angular中使用Socket.io实例代码
2017/06/03 Javascript
angularjs2中父子组件的数据传递的实例代码
2017/07/05 Javascript
VUE中使用Vue-resource完成交互
2017/07/21 Javascript
浅谈vue项目重构技术要点和总结
2018/01/23 Javascript
微信小程序Getuserinfo解决方案图解
2018/08/24 Javascript
jQuery zTree插件快速实现目录树
2019/08/16 jQuery
详细介绍解决vue和jsp结合的方法
2020/02/06 Javascript
[02:53]DOTA2英雄基础教程 山岭巨人小小
2013/12/09 DOTA
详解Python的迭代器、生成器以及相关的itertools包
2015/04/02 Python
Python中Continue语句的用法的举例详解
2015/05/14 Python
详解Python的Lambda函数与排序
2016/10/25 Python
OpenCV-Python实现轮廓检测实例分析
2018/01/05 Python
浅谈pandas中Dataframe的查询方法([], loc, iloc, at, iat, ix)
2018/04/10 Python
Python实现矩阵相乘的三种方法小结
2018/07/26 Python
Python中栈、队列与优先级队列的实现方法
2019/06/30 Python
Python Print实现在输出中插入变量的例子
2019/12/25 Python
Python ORM框架Peewee用法详解
2020/04/29 Python
html5 canvas的绘制文本自动换行的示例代码
2018/09/17 HTML / CSS
iframe与window.onload如何使用详解
2020/05/07 HTML / CSS
北美领先的牛仔品牌:Buffalo David Bitton
2017/05/22 全球购物
欧舒丹加拿大官网:L’Occitane加拿大
2017/10/29 全球购物
Vinatis德国:法国领先的葡萄酒邮购公司
2020/09/07 全球购物
怎么写好自荐书
2014/03/02 职场文书
《窗前的气球》教学反思
2014/04/07 职场文书