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 18 Vue.js
Vue 打包的静态文件不能直接运行的原因及解决办法
Nov 19 Vue.js
vuex的数据渲染与修改浅析
Nov 26 Vue.js
vue.js watch经常失效的场景与解决方案
Jan 07 Vue.js
vue-resource 拦截器interceptors使用详解
Jan 18 Vue.js
vue 项目@change多个参数传值多个事件的操作
Jan 29 Vue.js
详解Vue的七种传值方式
Feb 08 Vue.js
vue实现倒计时功能
Mar 24 Vue.js
vite+vue3.0+ts+element-plus快速搭建项目的实现
Jun 24 Vue.js
Vue的过滤器你真了解吗
Feb 24 Vue.js
vue代码分块和懒加载非必要资源文件
Apr 11 Vue.js
vue使用watch监听属性变化
Apr 30 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通过array_unshift函数添加多个变量到数组前端的方法
2015/03/18 PHP
php file_get_contents取文件中数组元素的方法
2017/04/01 PHP
PHP简单实现模拟登陆功能示例
2017/09/15 PHP
php设计模式之适配器模式实例分析【星际争霸游戏案例】
2020/04/07 PHP
Javascript 自定义类型方法小结
2010/03/02 Javascript
IE6/7 and IE8/9/10(IE7模式)依次隐藏具有absolute或relative的父元素和子元素后再显示父元素
2011/07/31 Javascript
js setTimeout 参数传递使用介绍
2013/08/13 Javascript
jquery ajaxSubmit 异步提交的简单实现
2014/02/28 Javascript
js实现简单的联动菜单效果
2015/08/19 Javascript
深入理解React中es6创建组件this的方法
2016/08/29 Javascript
JS实现快速的导航下拉菜单动画效果附源码下载
2016/11/01 Javascript
HTML5+jQuery实现搜索智能匹配功能
2017/03/24 jQuery
jQuery获取单选按钮radio选中值与去除所有radio选中状态的方法
2017/05/20 jQuery
Angular Renderer (渲染器)的具体使用
2018/05/03 Javascript
在vscode 中设置 vue模板内容的方法
2020/09/02 Javascript
[48:45]Ti4 循环赛第二日 NEWBEE vs EG
2014/07/11 DOTA
[07:26]2015国际邀请赛第二日TOP10集锦
2015/08/06 DOTA
Python表示矩阵的方法分析
2017/05/26 Python
python自动分箱,计算woe,iv的实例代码
2019/11/22 Python
Python爬取YY评级分数并保存数据实现过程解析
2020/06/01 Python
使用Python实现音频双通道分离
2020/12/25 Python
python学习之使用Matplotlib画实时的动态折线图的示例代码
2021/02/25 Python
浅谈cookie和localStorage那些事
2019/08/27 HTML / CSS
HTML5 window/iframe跨域传递消息 API介绍
2013/08/26 HTML / CSS
Spartoo比利时:欧洲时尚购物网站
2017/12/06 全球购物
Linux常见面试题
2016/10/04 面试题
科室工作的个人自我评价
2013/10/30 职场文书
计算机软件个人的自荐信范文
2013/12/01 职场文书
管道维修工岗位职责
2013/12/27 职场文书
超市开店计划书
2014/04/26 职场文书
十佳文明家庭事迹
2014/05/25 职场文书
小组口号霸气押韵
2015/12/24 职场文书
MYSQL 运算符总结
2021/11/11 MySQL
浅谈Redis 中的过期删除策略和内存淘汰机制
2022/04/03 Redis
Python使用socket去实现TCP客户端和TCP服务端
2022/04/12 Python
SQL Server2019安装的详细步骤实战记录(亲测可用)
2022/06/10 SQL Server