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 Elenent实现表格相同数据列合并
Nov 30 Vue.js
vue实现表格合并功能
Dec 01 Vue.js
vue基于Echarts的拖拽数据可视化功能实现
Dec 04 Vue.js
vue实现禁止浏览器记住密码功能的示例代码
Feb 03 Vue.js
Vue+Bootstrap实现简易学生管理系统
Feb 09 Vue.js
vue项目配置 webpack-obfuscator 进行代码加密混淆的实现
Feb 26 Vue.js
vue3.0封装轮播图组件的步骤
Mar 04 Vue.js
详解Vue的options
May 15 Vue.js
如何用vue实现网页截图你知道吗
Nov 17 Vue.js
一篇文章告诉你如何实现Vue前端分页和后端分页
Feb 18 Vue.js
vue 实现弹窗关闭后刷新效果
Apr 08 Vue.js
vue实现在data里引入相对路径
Jun 05 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中的正规表达式(二)
2006/10/09 PHP
使用PHP遍历文件夹与子目录的函数代码
2011/09/26 PHP
浅析PHP原理之变量(Variables inside PHP)
2013/08/09 PHP
PHP 输出缓冲控制(Output Control)详解
2016/08/25 PHP
jquery validator 插件增加日期比较方法
2010/02/21 Javascript
JavaScript(js)设置默认输入焦点(focus)
2012/12/28 Javascript
innerText 使用示例
2014/01/23 Javascript
js读取被点击次数的简单实例(从数据库中读取)
2014/03/07 Javascript
IE中JS跳转丢失referrer问题的2个解决方法
2014/07/18 Javascript
IE10中flexigrid无法显示数据的解决方法
2015/07/26 Javascript
jQuery+css实现的时钟效果(兼容各浏览器)
2016/01/27 Javascript
深入剖析JavaScript:Object类型
2016/05/10 Javascript
jQuery仿京东商城楼梯式导航定位菜单
2016/07/25 Javascript
bootstrap fileinput组件整合Springmvc上传图片到本地磁盘
2017/05/11 Javascript
Three.js实现浏览器变动时进行自适应的方法
2017/09/26 Javascript
深入理解JavaScript 中的执行上下文和执行栈
2018/10/23 Javascript
详解Nodejs get获取远程服务器接口数据
2019/03/26 NodeJs
vue实现todolist功能、todolist组件拆分及todolist的删除功能
2019/04/11 Javascript
浅谈Vue.set实际上是什么
2019/10/17 Javascript
element-ui tree结构实现增删改自定义功能代码
2020/08/31 Javascript
[04:29]2014DOTA2国际邀请赛 主赛事第三日TOPPLAY
2014/07/21 DOTA
对pandas的dataframe绘图并保存的实现方法
2017/08/05 Python
使用django和vue进行数据交互的方法步骤
2019/11/11 Python
Python类反射机制使用实例解析
2019/12/30 Python
prAna官网:瑜伽、旅行和冒险服装
2019/03/10 全球购物
历史系自荐信范文
2013/12/24 职场文书
小学生元旦广播稿
2014/02/21 职场文书
行政人事经理职位说明书
2014/03/05 职场文书
村支部书记群众路线对照检查材料思想汇报
2014/10/08 职场文书
初二学生评语大全
2014/12/26 职场文书
化工厂员工工作总结
2015/10/15 职场文书
使用HttpSessionListener监听器实战
2022/03/17 Java/Android
为Centos安装指定版本的Docker
2022/04/01 Servers
Vue OpenLayer 为地图绘制风场效果
2022/04/24 Vue.js
基于docker安装zabbix的详细教程
2022/06/05 Servers
GoFrame gredis缓存DoVar Conn连接对象 自动序列化GoFrame gredisDo/DoVar方法Conn连接对象自动序列化/反序列化总结
2022/06/14 Golang