组件/ContextMenu 右键菜单
通用组件

ContextMenu 右键菜单

基于 Floating UI 的右键菜单(跟随鼠标坐标)。

该页面由 AI 迁移生成,请谨慎使用

内容已迁移完成,但仍建议结合源码和人工评审结果使用。

ContextMenu 右键菜单

基于 Floating UI 的右键菜单(跟随鼠标坐标)。

基础用法

ContextMenu

示例即将加载...
<script setup lang="ts">
import { ref } from 'vue'

const controlledOpen = ref(false)
const x = ref(0)
const y = ref(0)

function openAtCenter() {
  x.value = Math.round(window.innerWidth * 0.5)
  y.value = Math.round(window.innerHeight * 0.38)
  controlledOpen.value = true
}
</script>

<template>
  <div style="display: grid; gap: 12px; width: 520px;">
    <div style="display: flex; gap: 8px; align-items: center;">
      <TxButton type="primary" @click="openAtCenter">
        Open controlled menu
      </TxButton>
      <TxButton @click="controlledOpen = false">
        Close
      </TxButton>
    </div>

    <TxContextMenu
      v-model="controlledOpen"
      :x="x"
      :y="y"
      @open="() => {}"
    >
      <template #menu>
        <TxContextMenuItem @select="() => {}">
          Copy
        </TxContextMenuItem>
        <TxContextMenuItem @select="() => {}">
          Paste
        </TxContextMenuItem>
        <TxContextMenuItem danger @select="() => {}">
          Delete
        </TxContextMenuItem>
      </template>
    </TxContextMenu>

    <TxContextMenu>
      <template #trigger>
        <div
          style="
            width: 100%;
            padding: 24px;
            border: 1px dashed var(--tx-border-color);
            border-radius: 12px;
            user-select: none;
          "
        >
          Right click here (uncontrolled)
        </div>
      </template>

      <template #menu>
        <TxContextMenuItem @select="() => {}">
          Refresh
        </TxContextMenuItem>
        <TxContextMenuItem @select="() => {}">
          Rename
        </TxContextMenuItem>
        <TxContextMenuItem danger @select="() => {}">
          Delete
        </TxContextMenuItem>
      </template>
    </TxContextMenu>
  </div>
</template>

API

TxContextMenu Props

属性名类型默认值说明
modelValueboolean | undefinedundefined是否打开(v-model);undefined 时为非受控模式
xnumber0打开坐标 X(可选)
ynumber0打开坐标 Y(可选)
widthnumber220菜单宽度
closeOnEscbooleantrueESC 关闭
closeOnClickOutsidebooleantrue点击外部关闭

TxContextMenu Events

事件名参数说明
open{ x: number; y: number }打开时触发(包含最终打开坐标)
close-关闭时触发

TxContextMenuItem Props

属性名类型默认值说明
disabledbooleanfalse是否禁用
dangerbooleanfalse危险操作样式

TxContextMenuItem Events

事件名参数说明
select-选中条目(点击后自动关闭菜单)