背景:通过树形控件筛选出子节点数据渲染列表,再操作列表。操作在繁琐,现在需要直接通过树进行操作:删除,编辑,详情等等。

首先创建一个树

<el-treeref="tree":data="data"node-key="id"@node-expand="treeOpen"@node-collapse="treeClose"@node-contextmenu="openTreeMenu"@node-click="handleNodeClick"
/>

查看 element 的官方文档 => elTree

node-contextmenu 当某一节点被鼠标右键点击时会触发该事件

共四个参数,依次为:event、传递给 data 属性的数组中该节点所对应的对象、节点对应的 Node、节点组件本身

node-click 节点被点击时的回调 共三个参数,依次为:传递给 data 属性的数组中该节点所对应的对象、节点对应的 Node、节点组件本身
node-expand 节点被展开时触发的事件     共三个参数,依次为:传递给 data 属性的数组中该节点所对应的对象、节点对应的 Node、节点组件本身
node-collapse 节点被关闭时触发的事件     共三个参数,依次为:传递给 data 属性的数组中该节点所对应的对象、节点对应的 Node、节点组件本身

现在知道了,右键点击树的参数和事件。我们需要 data 中的 id,明确现在的需求

首先 写好静态的菜单

// html
<div v-show="showTreeMenu" class="treeMenu"><div @click="treeJump">详情</div><div @click="treeEdit">编辑</div><div @click="treeMark">标记</div><div @click="treeDelete">删除</div>
</div>
// css
.treeMenu{position: fixed;z-index: 99999;top: 50%;left: 50%;background-color: white;overflow: hidden;border-radius: 5px;border: 1px solid #e6ebf5;box-shadow: 0 2px 12px 0 rgb(0 0 0 / 10%);div{padding: 3px 20px;box-sizing: border-box;//width: 50px;text-align: center;}div:hover{background-color: #eee;cursor: pointer;}
}

注:菜单默认不显示,最好不要嵌套太深,并且记得设置 z-index 避免被覆盖,其他样式根据自己需求都可以调整

添加右键事件,拿到需要的数据,触发显示菜单

openTreeMenu(event, data, node, target) {console.log(event, data, node, target)this.showTreeMenu = true // 显示菜单this.contextNode = data // 存储数据document.querySelector('.treeMenu').setAttribute('style',`top:${event.clientY}px;left:${event.clientX}px;`)document.addEventListener('click', this.closeTreeMenu)document.addEventListener('contextmenu', this.closeTreeMenu)
},

覆盖菜单样式后,添加了两个监听,用于关闭菜单。触发关闭后,及时移除监听事件

closeTreeMenu() {this.showTreeMenu = false // 关闭菜单document.removeEventListener('click', this.closeTreeMenu)document.removeEventListener('contextmenu', this.closeTreeMenu)
}

现在回到上面提到的另外三个方法,需要在他们三个的事件中,关闭右键菜单,否则我们的右键菜单打开后,操作节点树,是不会触发我们写的关闭监听的。

把菜单中的功能都加上,右键菜单完成。

如果有更好的方法和指正欢迎讨论。

vue2+elTree 实现右键菜单相关推荐

  1. vue+element-UI实现右键菜单

    转载请注明原文地址 大体思路类似,具体实现在于控件是否提供了右键菜单的回调方法. 右键菜单的样式也可以根据自己需求进行变更. 新版本 基于vue3 支持自动调整偏移量,防止菜单超出屏幕 封装right ...

  2. 实例-Vue中使用右键菜单之@xunleivue-context-menu组件的使用

    实例-Vue中使用右键菜单之@xunlei/vue-context-menu组件的使用 npm地址--https://www.npmjs.com/package/@xunlei/vue-context ...

  3. JS简单实现自定义右键菜单

    今天来讲一个关于右键菜单的小demo,抛砖引玉. 首先,我们要用css和html做一个自定义右键菜单. <!--自定义右键菜单html代码--> <div id="menu ...

  4. vue右键自定义菜单_一款小巧的开源右键菜单管理软件

    要说右键管理软件,果核上面目前收集了几款,例如年久失修的右键管家. 虽然很多年没有更新了,但是软件的功能却正常,日常删除多余的右键菜单没问题. 另外,就是火绒家的右键管家,基本功能也够用 不过嘛,今天 ...

  5. 安装ATi显卡驱动后增加的鼠标右键菜单的清理

    一般最直接的方法是: 一般位于注册表的: 删除注册表HKEY_CLASSES_ROOT\Directory \Background\shellex\ContextMenuHandlers\ACE下 a ...

  6. 【Qt】菜单栏、工具栏、状态栏、右键菜单的实现

    在QMainWidget基础上实现菜单栏.工具栏.状态栏.右键菜单. 头文件: #ifndef GWDEMO_H #define GWDEMO_H#include <QMainWindow> ...

  7. mac系统添加VSCode到右键菜单(转)

    转自:https://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000/0014709690772 ...

  8. Cygwin-添加到右键菜单脚本--一键安装、卸载

    平时习惯用一些linux命令来完成工作,在Windows上有cygwin和gitbash两个选择.这两个我都装了. 相对来说cygwin支持的功能更多一些,但是它没有默认绑定到右键菜单.为此,我想到用 ...

  9. 自定义html页面鼠标右键,javascript鼠标右键菜单自定义效果

    本文实例讲解了javascript鼠标右键菜单的实现方法,分享给大家供大家参考,具体内容如下 效果图: 具体代码: #menu{ border:solid 1px gray; width:100px; ...

最新文章

  1. Java集合框架中Map接口的使用
  2. 17、计算机图形学——辐射度量学
  3. ABAP常用function 收藏
  4. SQL 分页查询语句大全即(查找第N到M条记录的方法)
  5. python基本语法:列表(列表和元组的区别)
  6. MSSQL系列之十五 全文索引
  7. ORACLE客户端连接
  8. [2019上海网络赛J题]Stone game
  9. 在Oracle Data Guard环境中的RMAN备份和还原
  10. 微信聊天api接口调用代码
  11. 仿QQ音乐(别人的代码)
  12. google hacking
  13. IT创业项目-赚钱项目-网赚项目:月入2W+的视频号创业项目
  14. 阿里巴巴面试算法题目:25匹赛马,5个跑道,也就是说每次有5匹马可以同时比赛。问最少比赛多少次可以知道跑得最快的5匹马
  15. 查看pdf文件的目录和添加标签的方法
  16. 31个惊艳的数据可视化作品,感受“数据之美”!
  17. 一篇文让你看懂NB-IoT、LoRa、eMTC、Sigfox及ZigBee的应用场景
  18. 成熟男人与24岁女孩精彩对白 —非常感动
  19. php.ini maxfileuploads,细说PHP高洛峰文件上传类源文件
  20. Linux tar命令详解

热门文章

  1. 如何快速的将ts转换成js
  2. 02 FreeRTOS 任务的延续
  3. 计算机怎么看硬盘内c,有问有答:怎么判断电脑里面的是不是固态硬盘?
  4. 【Python】打印输出200以内的所有素数,并输出素数的个数
  5. html页面显示透视效果图,用css来实现透视效果
  6. linux 扫描局域网内所有主机
  7. 腾讯云百万容器镜像安全治理运营实践
  8. 编程题004--对称的二叉树--niuke
  9. es倒排索引和mysql索引的_【漫画】ES原理 必知必会的倒排索引和分词
  10. 11.5 Daily Scrum