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动态合并单元格并添加小计合计功能示例
Nov 26 Vue.js
Vue中inheritAttrs的使用实例详解
Dec 31 Vue.js
Vue中强制组件重新渲染的正确方法
Jan 03 Vue.js
vue 动态生成拓扑图的示例
Jan 03 Vue.js
Vue实现摇一摇功能(兼容ios13.3以上)
Jan 26 Vue.js
如何在 Vue 中使用 JSX
Feb 14 Vue.js
使用vue-element-admin框架从后端动态获取菜单功能的实现
Apr 29 Vue.js
vue2实现provide inject传递响应式
May 21 Vue.js
Vue的过滤器你真了解吗
Feb 24 Vue.js
解决vue中provide inject的响应式监听
Apr 19 Vue.js
vue 把二维或多维数组转一维数组
Apr 24 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
PHP函数之日期时间函数date()使用详解
2013/09/09 PHP
PHP实现动态web服务器方法
2015/07/29 PHP
PHP可变函数学习小结
2015/11/29 PHP
POST一个JSON格式的数据给Restful服务实例详解
2017/04/07 PHP
Laravel5.1 框架路由基础详解
2020/01/04 PHP
js注意img图片的onerror事件的分析
2011/01/01 Javascript
JavaScript动态插入script的基本思路及实现函数
2013/11/11 Javascript
Javascript高级技巧分享
2014/02/25 Javascript
node.js解决获取图片真实文件类型的问题
2014/12/20 Javascript
JavaScript如何禁止Backspace键
2015/12/02 Javascript
深入理解ES6学习笔记之块级作用域绑定
2017/08/19 Javascript
JavaScript学习笔记之函数记忆
2017/09/06 Javascript
bootstrap treeview 树形菜单带复选框及级联选择功能
2018/06/08 Javascript
node.js中 mysql 增删改查操作及async,await处理实例分析
2020/02/11 Javascript
ES6使用 Array.includes 处理多重条件用法实例分析
2020/03/02 Javascript
element日历calendar组件上月、今天、下月、日历块点击事件及模板源码
2020/07/27 Javascript
[00:42]《辉夜杯》—职业组预选赛12月3日15点 正式打响
2015/12/03 DOTA
Python 实现链表实例代码
2017/04/07 Python
python 删除大文件中的某一行(最有效率的方法)
2017/08/19 Python
使用DataFrame删除行和列的实例讲解
2018/04/08 Python
python matplotlib实现双Y轴的实例
2019/02/12 Python
python打包成so文件过程解析
2019/09/28 Python
python标准库os库的函数介绍
2020/02/12 Python
基于pandas向csv添加新的行和列
2020/05/25 Python
HTML5+Canvas+CSS3实现齐天大圣孙悟空腾云驾雾效果
2016/04/26 HTML / CSS
西安夏日科技有限公司Java笔试题
2013/01/11 面试题
七年级生物教学反思
2014/01/30 职场文书
《手指教学》反思
2014/02/14 职场文书
企业趣味活动方案
2014/08/21 职场文书
呐喊读书笔记
2015/06/30 职场文书
小学生暑假安全公约
2015/07/14 职场文书
2016校本研修培训心得体会
2016/01/08 职场文书
离婚协议书范本(2016最新版)
2016/03/18 职场文书
导游词之杭州岳王庙
2019/11/13 职场文书
React如何创建组件
2021/06/27 Javascript
Redis入门教程详解
2021/08/30 Redis