自定义右键菜单组件

21 篇文章 0 订阅
18 篇文章 0 订阅

vue3基础下:

// 右键菜单组件
<template>
  <div class="mouse-menu" :style="mouse_menu_style">
    <div class="mouse-menu-item" v-for="(item, index) in mouseMenu" :key="index" @click="otherMethod(item.type)">{{item.name}}</div>
    <div class="mouse-menu-item mouse-menu-delete" v-show="props.isDelete" @click="deleteMthod">删除</div>
  </div>
</template>

<script setup>
import { ref } from 'vue'
const props = defineProps({
  mouseMenu: Object, // 鼠标右键自定义菜单
  mouse_menu_style: Object, // 鼠标右键自定义菜单style
  isDelete: Boolean, // 是否需要含有删除操作
})
const emit = defineEmits(['otherMehod','deleteMthod'])
// 其他自定义操作
const otherMethod = (type) => {
  console.log('type',type)
  emit('otherMethod', type)
}
// 删除操作
const deleteMthod = () => {
  emit('deleteMthod')
}
</script>

<style lang="scss" scoped>
.mouse-menu{
  position: fixed;
  visibility: hidden;
  background-color: #707070;
  border-radius: 0.1vw;
  z-index: 9999;
  .mouse-menu-item{
    width: 3.4375vw;
    height: 1.458vw;
    line-height: 1.458vw;
    text-align: center;
    cursor: pointer;
    user-select: none;
  }
  .mouse-menu-delete{
    color: #FF3F3F;
  }
  .mouse-menu-item:hover{
    background-color: rgba(255, 255, 255, 0.34);
  }
  .mouse-menu-item:active{
    background-color: rgba(255, 255, 255, 0.34);
  }
}
</style>

其他组件调用:

// ...
<div @contextmenu="contextmenu(data)"></div>
<mouseMenu :mouseMenu="mouseMenuList" :isDelete="true" :mouse_menu_style="mouse_menu_style" @deleteMthod="deleteMthod" @otherMethod="editMethod"></mouseMenu>
// ...


// 右键事件
// 右键自定义菜单
const mouseMenuList = ref([{ name: '编辑', type: 'edit' }])
const mouse_menu_style = ref({})
const contextmenu = (data) => {
  mouse_menu_style.value = {
    top: event.clientY+'px',
    left: event.clientX+'px',
    visibility: 'visible'
  }
  // 阻止右键默认行为
  event.preventDefault()
  // 点击页面其他地方隐藏自定义菜单
  document.onclick = (e) => {
    closeMenu()
  }
}
// 关闭右键菜单
const closeMenu = () => {
  mouse_menu_style.value = {
    visibility: 'hidden'
  }
}
// 右键其他操作,由type区分
const editMethod = (type) => {
  
}
// 右键删除操作
const deleteMthod= () => {
  
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值