vue3实现右键自定义菜单栏功能

  1. 先写好自定义菜单,可以复制我的

<template>
  <div @contextmenu="rightClicked($event)">右击</div>
  <div :class="{ isShow: myMenuVisible }" class="myMenu">
    <ul>
      <li @click.stop="close('all')">关闭全部</li>
      <li @click.stop="close('others')">关闭其他</li>
    </ul>
  </div>
</template>

<script setup>
import {ref,reactive} from "vue"
let myMenuVisible = ref(false); //表示是否显示右键的菜单栏
const rightClicked = (e) => {
  //右击之后阻止默认事件(必不可少),关闭原来的右键菜单
  e.preventDefault();
  myMenuVisible.value = true; //然后打开写好的自定义菜单
  let myMenu = document.querySelector(".myMenu"); //再获取菜单标签
  myMenu.style.top = `${e.clientY}px`; //赋值菜单的x和y值
  myMenu.style.left = `${e.clientX}px`;
};
//监听document文档流,点击左键时关闭菜单栏,第六行和第七行的事件要加上.stop后缀名,用来阻止冒泡
document.addEventListener("click", () => {
  myMenuVisible.value = false;
});
//点了自定义菜单的操作
const close = (type) => {
  if (type == "all") {
    //点了全部关闭的逻辑
    console.log(type);
    myMenuVisible.value = false;
  } else {
    //点了关闭其他的逻辑
    console.log(type);
    myMenuVisible.value = false;
  }
};
</script>

<style lang="less">
//这里用到less处理,没下载的要先下载一下
.myMenu {
  position: absolute;
  top: 0;
  left: 0;
  // width: 150px;
  background-color: #fff;
  box-sizing: border-box;
  padding: 10px;
  box-shadow: 0 0 8px 0px rgba(0, 0, 0, 0.3);
  border-radius: 5px;
  display: none;
  > ul {
    list-style: none;
    font-size: 14px;
    color: #666;
    li {
      font-size: 13px;
      margin: 3px 0;
    }
    > li:hover {
      background-color: #eee;
      cursor: pointer;
    }
  }
}
.isShow {
  display: block;
}
</style>

效果:

很棒

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要在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事件来捕获右键点击事件,并自定义菜单的样式和行为。 希望对你有所帮助!如果还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值