ContextMenu 右键菜单 v.1.0.7+

快速的数据化配置一个右键菜单,用于交互逻辑较多的页面。

基础使用

使用 menus 配置一个菜单,contextMenu 事件需要禁用默认行为避免弹出默认菜单。

绑定icon 不仅支持图标名称,也可以支持常规的图片。

组件内置了可视区域的边缘处理,无需做额外的类似 x + menu.width > window.width 的计算。

点击查看代码
<template>
  <div>
    <div
      :class="['demo', { 'full-screen-demo': fullScreen }]"
      style="height: 150px"
      @contextmenu.prevent="onContextmenu($event)"
    >
      <p>此处使用右键触发菜单</p>
      <ElButton @click="fullScreen = !fullScreen">切换全屏</ElButton>
    </div>
    <AgelContextMenu
      v-model="contextMenu.show"
      :x="contextMenu.x"
      :y="contextMenu.y"
      :menus="contextMenu.data"
      @select="contextMenu.onSelect"
    />
  </div>
</template>

<script setup lang="ts">
import { reactive, ref } from 'vue'
import { ElMessage } from 'element-plus'
const fullScreen = ref(false)
const contextMenu = reactive({
  show: false,
  x: 0,
  y: 0,
  data: [
    { title: '1-1 菜单', icon: 'Menu' },
    {
      title: '1-2 菜单',
      icon: 'Menu',
      divided: true
    },
    {
      title: '1-3 菜单',
      icon: 'https://element-plus.org/images/element-plus-logo.svg',
      children: [
        { title: '1-3-1 菜单', remark: 'Ctrl+A' },
        { title: '1-3-2 菜单', disabled: true },
        {
          title: '1-3-3 菜单',
          className: 'custom-red-menu-item'
        }
      ]
    }
  ],
  onSelect: (item: any) => {
    console.log(item)
    ElMessage.success('选中了' + item.title)
  }
})

function onContextmenu(e: MouseEvent) {
  contextMenu.show = true
  contextMenu.x = e.clientX
  contextMenu.y = e.clientY
  e.preventDefault()
}
</script>
<style>
.custom-red-menu-item {
  color: red !important;
}
.full-screen-demo {
  margin: 0px !important;
  width: 100vw !important;
  height: 100vh !important;
  position: fixed;
  top: 0;
  left: 0;
  background-color: var(--el-bg-color);
  z-index: 999;
}
</style>

属性

属性类型默认值说明
modelValueboolean-是否显示
xnumber-菜单出现的 x 坐标
ynumber-菜单出现的 y 坐标
menusMenuItemProps[]-菜单配置
transitionstring'el-zoom-in-top'过渡动画,transition 组件的 name 名称
属性类型默认值说明
titlestring-菜单名称,必须
iconstring-菜单图标或图片地址
remarkstring-菜单备注
dividedboolean-菜单下划线
disabledboolean-是否禁用
hiddenboolean-是否隐藏
classNamestring-Class 名称
childrenMenuItemProps[]-下级菜单配置

事件

名称参数说明
selectMenuItemProps菜单选项被点击时触发
Last Updated:
Contributors: agrass, liujianfeng