我的编程空间,编程开发者的网络收藏夹
学习永远不晚

element表格组件实现右键菜单的功能

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

element表格组件实现右键菜单的功能

前言

最近产品给我提了个需求 ————想要实现用户右键table的某一行时,显示该行操作栏的功能。觉得这个需求挺有意思的,特此分享给大家。

技术栈: elementUI

实现思路

要实现右键菜单 我们需要定义一个菜单栏组件 当用户点击table的某一行时,我们处理好显示位置再将菜单栏渲染到table上。先实现这个rightKeyMenu组件:

// right-key-menu.vue 
<template>
  <div id="right-key-menu" class="right-key-menu">
    <div class="rightKeyMenuItem" @click="$emit('edit')">编辑</div>
    <div class="rightKeyMenuItem" @click="$emit('del')">删除</div>
  </div>
</template>
<script>
 //...忽略
  methods: {
        onload (row, column,event) {
           //调整菜单出现的位置
          let menu = document.querySelector('#right-key-menu')
          let betweenHeight = document.body.clientHeight - event.clientY
          if (betweenHeight < 150) {
            menu.style.top = event.clientY -80 + 'px'
          } else {
            menu.style.top = event.clientY -30 + 'px'
          }
          menu.style.left = event.clientX + 20 + 'px'
          // 监听dom的click事件
          document.addEventListener('click', this.$emit('rightClick')) 
       }
        }
  </script>      
<style>
.right-key-menu {
  display: block;
  line-height: 34px;
  text-align: center;
}
.right-key-menu:not(:last-child) {
  border-bottom: 1px solid rgba(0, 0, 0, 0.1);
}
.right-key-menu {
  position: absolute;
  background-color: #fff;
  width: 100px;
  font-size: 12px;
  color: #444040;
  border-radius: 4px;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
  border-radius: 3px;
  border: 1px solid rgba(0, 0, 0, 0.15);
  box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
  white-space: nowrap;
  z-index: 1000;
}
.rightKeyMenuItem:hover {
  cursor: pointer;
  background: #66b1ff;
  border-color: #66b1ff;
  color: #fff;
}
</style>

使用rightKeyClick组件。我们需要监听用户右键点击table行的操作, 这个功能在elementUI table中已经有相应的方法了:

row-contextmenu 当某一行被鼠标右键点击时会触发该事件 (row, column, event)

触发这个方法然后将参数都传递过去。修改visable的值将菜单栏组件显现出来。

在菜单栏组件中我们通过获取到当前点击时浏览器Y轴位置将menu的高度进行合适修改。这样当我们点击不同table行。menu的位置也会随着鼠标点击时距离浏览器Y轴的位置相应的进行变化。

// business-table
<template>
<div>
<el-table
 :data="tableData"
  @row-contextmenu="rowContextmenu"
  border> 
 //...忽略
</el-table>
<rightKeyMenu v-if="visable"
              @rightClick="rightClick" 
              ref="menu" 
              @edit="handleEdit"
              @del="handleDel">
              </rightKeyMenu>
 </div>
</template>
import rightKeyMenu from '@component/right-key-menu/index'
export default {
   components: {
      rightKeyMenu
    },
    methods: {
      rowContextmenu (row, column, event) {
        //如果之前已经打开了先关闭一下。
          this.visable = false
        setTimeout(()=>{
          this.visable = true
        },300)
        // 阻止右键默认行为
        event.preventDefault()
        this.$nextTick(() => {
          this.$refs.menu.onload(row,column,event)
        })
      },
      rightClick() { 
        this.visable = false
        // 取消鼠标监听事件 菜单栏
        document.removeEventListener('click', this.rightClick)
      },
      handleEdit () {
        // ..do something
      },

      handleDel () {
       // ..do something
      }
    }
  }

有时候列表的操作项并不仅仅局限于修改和删除。 因此我们可以使用插槽自定义需要显示的内容。

<template>
  <div id="right-key-menu" class="right-key-menu">
    <div class="rightKeyMenuItem" @click="$emit('edit')">编辑</div>
    <div class="rightKeyMenuItem" @click="$emit('del')">删除</div>
    <div class="rightKeyMenuItem"><slot name="more"></slot></div>
  </div>
</template>

至此。element右键菜单的功能就实现完成了。实现这个需求最主要的一点是要计算好右键菜单显示的位置。由于不同页面table所在位置不同,因此rightKeyClick组件还需要传递几个参数去进行优化适配。这里我就不在细说了。大家可以自己去试试。

最后

到此这篇关于element表格组件实现右键菜单的功能的文章就介绍到这了,更多相关element表格右键菜单内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

element表格组件实现右键菜单的功能

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Vue el-table怎么实现右键菜单功能

这篇文章主要介绍了Vue el-table怎么实现右键菜单功能的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Vue el-table怎么实现右键菜单功能文章都会有所收获,下面我们一起来看看吧。实现的效果如下:1
2023-06-29

Android中实现长按照片弹出右键菜单功能的实例代码

场景效果注: 实现 将布局改为LinearLayout,并通过android:orientation="vertical">设置为垂直布局。 然后添加一个ImageView,并设置id属性和图片源。
2022-06-06

python实现应用程序在右键菜单中添加打开方式功能

最近项目组开发的一个小工具想要在右键菜单中添加打开方式,以有道云笔记为例进行了需求拆解和代码编写 1.需求拆解: 如何实现手动添加右键菜单的打开方式: Step1:打开注册表编辑器,Win+R->输入 “regedit”Step2:在HKE
2022-06-04

VueelementUI自定义表单模板组件功能实现

在项目开发中,我们会遇到这种需求,在管理后台添加自定义表单,在指定的页面使用定义好的表单,这篇文章主要介绍了VueelementUI自定义表单模板组件,需要的朋友可以参考下
2022-12-24

c#下拉菜单的功能加入控件后功能怎么实现

在 c# 中,可以通过 combobox 控件实现下拉菜单功能:添加 combobox 控件。通过 items 属性设置选项列表(可直接指定或数据绑定)。处理 selectedindexchanged 事件以响应用户选择。C# 下拉菜单功能
c#下拉菜单的功能加入控件后功能怎么实现
2024-05-12

element-ui el-upload实现上传文件及简单的上传文件格式验证功能

前端上传文件后,后端接受文件进行处理后直接返回处理后的文件,前端直接再将文件下载下来,下面这篇文章主要给大家介绍了关于element-ui el-upload实现上传文件及简单的上传文件格式验证功能的相关资料,需要的朋友可以参考下
2022-11-16

Vue3+Element-Plus 实现点击左侧菜单时显示不同内容组件展示在Main区域功能

这篇文章主要介绍了Vue3+Element-Plus 实现点击左侧菜单时显示不同内容组件展示在Main区域功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2023-01-13

Vue3+Element+Ts如何实现表单的基础搜索重置等功能

本篇内容主要讲解“Vue3+Element+Ts如何实现表单的基础搜索重置等功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Vue3+Element+Ts如何实现表单的基础搜索重置等功能”吧!
2023-06-22

编程热搜

目录