美文网首页vue学习与总结Vue.js开发技巧
vue(element-ui)实现右键菜单(仅需三步)

vue(element-ui)实现右键菜单(仅需三步)

作者: 不语u | 来源:发表于2020-08-27 16:05 被阅读0次

    一、效果如图

    image.png

    二、具体实现

    1.首先,在Dom中新建一个div(data中别忘menuVisible,用来控制菜单是否显示)
    <div id="contextmenu"
               v-show="menuVisible"
               class="menu">
            <div class="contextmenu__item"
                 @click="ShowView(CurrentRow)">查看</div>
            <div class="contextmenu__item"
                 @click="EditData(CurrentRow)">修改</div>
    </div>
    
    2.style给上样式
    <style>
    .contextmenu__item {
      display: block;
      line-height: 34px;
      text-align: center;
    }
    .contextmenu__item:not(:last-child) {
      border-bottom: 1px solid rgba(0, 0, 0, 0.1);
    }
    .menu {
      position: absolute;
      background-color: #fff;
      width: 100px;
      /*height: 106px;*/
      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;
    }
    .contextmenu__item:hover {
      cursor: pointer;
      background: #66b1ff;
      border-color: #66b1ff;
      color: #fff;
    }
    </style>
    
    3.el-table中给上右键点击事件:@row-contextmenu="rightClick",methods中添加方法
    methods: {
        rightClick(row, column, event) {
          this.testModeCode = row.testModeCode
          this.menuVisible = false // 先把模态框关死,目的是 第二次或者第n次右键鼠标的时候 它默认的是true
          this.menuVisible = true // 显示模态窗口,跳出自定义菜单栏
          event.preventDefault() //关闭浏览器右键默认事件
          this.CurrentRow = row
          var menu = document.querySelector('.menu')
          this.styleMenu(menu)
        },
        foo() {
          // 取消鼠标监听事件 菜单栏
          this.menuVisible = false
          document.removeEventListener('click', this.foo) // 关掉监听,
        },
        styleMenu(menu) {
          if (event.clientX > 1800) {
            menu.style.left = event.clientX - 100 + 'px'
          } else {
            menu.style.left = event.clientX + 1 + 'px'
          }
          document.addEventListener('click', this.foo) // 给整个document新增监听鼠标事件,点击任何位置执行foo方法
          if (event.clientY > 700) {
            menu.style.top = event.clientY - 30 + 'px'
          } else {
            menu.style.top = event.clientY - 10 + 'px'
          }
        },
    }
    

    相关文章

      网友评论

        本文标题:vue(element-ui)实现右键菜单(仅需三步)

        本文链接:https://www.haomeiwen.com/subject/guncsktx.html