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 25 Vue.js
vue中封装axios并实现api接口的统一管理
Dec 25 Vue.js
vue 计算属性和侦听器的使用小结
Jan 25 Vue.js
vue中h5端打开app(判断是安卓还是苹果)
Feb 26 Vue.js
vue 动态添加的路由页面刷新时失效的原因及解决方案
Feb 26 Vue.js
解决vue $http的get和post请求跨域问题
Jun 07 Vue.js
详细聊聊vue中组件的props属性
Nov 02 Vue.js
详解Vue中$props、$attrs和$listeners的使用方法
Feb 18 Vue.js
vue+echarts实现多条折线图
Mar 21 Vue.js
Vue ECharts实现机舱座位选择展示功能
May 15 Vue.js
vue如何在data中引入图片的正确路径
Jun 05 Vue.js
Vue router配置与使用分析讲解
Dec 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
将RTF格式的文件转成HTML并在网页中显示的代码
2006/10/09 PHP
细谈php中SQL注入攻击与XSS攻击
2012/06/10 PHP
深入理解require与require_once与include以及include_once的区别
2013/06/05 PHP
php多文件上传实现代码
2014/02/20 PHP
php计算程序运行时间的简单例子分享
2014/05/10 PHP
PHP中加密解密函数与DES加密解密实例
2014/10/17 PHP
Zend Framework动作助手Json用法实例分析
2016/03/05 PHP
定位地理位置PHP判断员工打卡签到经纬度是否在打卡之内
2019/05/23 PHP
json数据处理技巧(字段带空格、增加字段、排序等等)
2013/06/14 Javascript
js中的preventDefault与stopPropagation详解
2014/01/29 Javascript
node.js入门实例helloworld详解
2015/12/23 Javascript
谈谈我对JavaScript原型和闭包系列理解(随手笔记9)
2015/12/24 Javascript
属于你的jQuery提示框(Tip)插件
2016/01/20 Javascript
React组件的三种写法总结
2017/01/12 Javascript
jquery实现的table排序功能示例
2017/03/10 Javascript
JavaScript订单操作小程序完整版
2017/06/23 Javascript
jQuery+C#实现参数RSA加密传输功能【附jsencrypt.js下载】
2017/06/26 jQuery
浅谈Node.js ORM框架Sequlize之表间关系
2017/07/24 Javascript
JS实现获取word文档内容并输出显示到html页面示例
2018/06/23 Javascript
JavaScript迭代器的含义及用法
2019/06/21 Javascript
Vue + Element-ui的下拉框el-select获取额外参数详解
2020/08/14 Javascript
python 打印直角三角形,等边三角形,菱形,正方形的代码
2017/11/21 Python
python实现一个简单的ping工具方法
2019/01/31 Python
在python里从协程返回一个值的示例
2019/02/19 Python
django多对多表的创建,级联删除及手动创建第三张表
2019/07/25 Python
Sephora丝芙兰马来西亚官方网站:国际化妆品购物
2018/03/15 全球购物
美国专业消费电子及摄影器材网站:B&H Photo Video
2019/12/18 全球购物
德国在线香料制造商:Gewürzland
2020/03/10 全球购物
运动会四百米广播稿
2014/01/19 职场文书
初一体育教学反思
2014/01/29 职场文书
财务支持类个人的自我评价
2014/02/14 职场文书
中药学自荐信
2014/06/15 职场文书
村党支部群众路线教育实践活动对照检查材料
2014/09/26 职场文书
个人政风行风自查自纠报告
2014/10/21 职场文书
2014年个人师德工作总结
2014/12/04 职场文书
团代会邀请函
2015/02/02 职场文书