vue elementui table表格右键鼠标 自定义菜单内容

Element组件 table表格 右键鼠标 自定义菜单(效果图在文字末尾)

1、基于elementui组件 table表格组件;
2、右键任何位置 跟随鼠标位置跳转菜单;
3、类似于window鼠标右键一样的效果;

给表格组件绑定右键事件@row-contextmenu=“rightClick”;
注意阻止弹出浏览器默认的菜单栏,即使用 e.preventDefault();

代码如下:

html部分:

<el-table 
      border 
      stripe 
      size="small"
      style="width: 100%;"
      highlight-current-row
      @row-contextmenu="rightClick"
      :data="data1"
      ref="labelTableRef">
      <el-table-column type="index" label="序号" width="60" align="center"></el-table-column>
      <el-table-column prop="name" label="名称1"></el-table-column>
      <el-table-column prop="name" label="名称2"></el-table-column>
      <el-table-column prop="name" label="名称3"></el-table-column>
    </el-table>
    
     <!-- 右键菜单内容 -->
    <div v-show="menuVisible" ref="menuRef">
      <div id="menu" class="menu">
        <div class="menu_item first">在新标签页中打开链接</div>
        <div class="line"></div>
        <!-- <div class="menu_item" @click="newWindowOpenLink">在新窗口中打开链接</div> -->
        <div class="menu_item second">复制链接地址</div>
      </div>
    </div>

js部分:

data() {
    return {
      data1: [{name: '名称1'},{name: '名称2'},{name: '名称3'},{name: '名称4'},],
      menuVisible: false,
    }
  },
mounted () {
    document.addEventListener('click',this.bodyCloseMenu)
  },
  // 在页面注销前,将点击事件给移除
  beforeDestroy() {
    document.removeEventListener('click',this.bodyCloseMenu)
  },
 methods: {
    rightClick (row, column, event) {
      this.menuVisible = false
      this.menuVisible = true
      var menu = document.querySelector('#menu')
      event.preventDefault();  // 阻止浏览器默认右键事件
      menu.style.left = event.pageX - 40 + 'px'  // MouseEvent.clientX获取鼠标点击的坐标,在该处新增加的menu填充的位置
      menu.style.top = event.pageY - 50 + 'px'
    },
    bodyCloseMenu(e) {
      let self = this
      if (this.$refs.menuRef && !this.$refs.menuRef.contains(e.target)) {
        if (self.menuVisible === true) {
          self.menuVisible = false
        }
      }
    },
 }

css部分:

<style lang="scss" scoped>
.menu {
  position: absolute;
  border-radius: 3px;
  border: 1px solid #E4E7ED;
  box-shadow: 0 2px 12px 0 rgb(0 0 0 / 10%);
  background-color: #FFF;
  padding: 8px 0;
  z-index: 9;
}
.menu_item {
  // display: block;
  padding: 5px 60px 0px 25px;
  font-size: 12px;
  white-space: nowrap;
  cursor: pointer;
}
.menu_item:hover {
  background-color: #eee;
}
.first {
  padding-bottom: 5px;
}
.second {
  padding-top: 5px;
}
.line {
  border-bottom: 1px solid #E4E7ED;
}
</style>

效果图如下:

在这里插入图片描述

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Vue中实现自定义鼠标右键菜单,你可以借助第三方插件或者自己编写代码来实现。下面是一个使用第三方插件 `vue-contextmenu` 的示例: 首先,安装 `vue-contextmenu` 插件: ```shell npm install vue-contextmenu ``` 然后,在你的Vue项目中,导入并注册 `vue-contextmenu` 插件: ```javascript import VueContextmenu from 'vue-contextmenu'; Vue.use(VueContextmenu); ``` 接下来,在需要添加右键菜单的元素上使用 `v-contextmenu` 指令,并绑定一个方法来定义菜单内容和行为: ```html <template> <div> <div v-contextmenu="contextMenu"> Right-click me! </div> </div> </template> <script> export default { data() { return { contextMenu: [ { text: '菜单项1', action: 'menuItem1' }, { text: '菜单项2', action: 'menuItem2' }, { text: '菜单项3', action: 'menuItem3' } ] }; }, methods: { menuItem1() { console.log('执行菜单项1的操作'); }, menuItem2() { console.log('执行菜单项2的操作'); }, menuItem3() { console.log('执行菜单项3的操作'); } } }; </script> ``` 在这个例子中,`contextMenu` 数组定义了右键菜单内容,每个菜单项都有一个 `text` 属性用于显示菜单项的文本,以及一个 `action` 属性用于定义菜单项被点击时要执行的方法。 运行项目后,当你在指定的元素上右键点击时,就会弹出自定义右键菜单,并执行相应的方法。 除了使用第三方插件外,你也可以根据需求自己编写代码来实现自定义鼠标右键菜单。这需要使用原生JavaScript事件来捕获右键点击事件,并自定义菜单的样式和行为。 希望对你有所帮助!如果还有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值