Skip to content

函数模式

ContextMenu

ts
import ContextMenu from '@imengyu/vue3-context-menu'

菜单全局函数。

ContextMenu.showContextMenu(options: MenuOptions, customSlots?: Record<string, Slot>)

显示菜单.

参数说明
options菜单的数据
customSlots这些插槽允许您自定义当前菜单的样式,这些插槽的名称与 组件模式 ContextMenu 中的插槽名称相同,具体自定义方式,可参考自定义文档

返回值

类型说明
ContextMenuInstance当前菜单的实例,可调用 closeMenu 关闭菜单;可调用 isClosed 检查当前实例是否已经关闭

ContextMenu.closeContextMenu()

手动关闭当前打开的菜单.

this.$contextmenu

ContextMenu.showContextMenu 相同,但此函数注册到 Vue 全局属性中,可以在Vue实例中直接使用。

ContextMenu.transformMenuPosition

如果你的 body 元素处于缩放状态 (例如添加了样式 transform: scale(0.5)), 这可能会导致菜单显示位置不正确。 你可以使用此函数来转换至正确的菜单显示位置:

ts
import ContextMenu from '@imengyu/vue3-context-menu'

function onContextMenu(e: MouseEvent) {
  const scaledPosition = ContextMenu.transformMenuPosition(e.target as HTMLElement, e.offsetX, e.offsetY);
  //完整示例代码位于 `/examples/views/InScaledBody.vue`
  menuData.x = scaledPosition.x;
  menuData.y = scaledPosition.y;
  //显示菜单
  ContextMenu.showContextMenu(menuData);
}
属性描述类型可选值默认值
items
菜单结构信息
MenuItem[]
x菜单显示X坐标number0
y菜单显示Y坐标number0
xOffset子菜单与父菜单X的偏移number0
yOffset子菜单与父菜单Y的偏移number0
iconFontClass自定义图标字体类名stringiconfont
zIndex菜单的z-indexnumber2
customClass自定义菜单类名string
minWidth主菜单最小宽度number or string100
maxWidth主菜单最大宽度number or string600
keyboardControl设置用户是否可以使用键盘键控制当前菜单booleantrue
theme菜单的主题string'default' 'dark' 'flat' 'win10' 'mac'default
preserveIconWidth是否应为没有图标的菜单项保留固定宽度的图标区域boolean-true
closeWhenScroll用户滚动鼠标时是否关闭菜单boolean-true
mouseScroll设置用户是否可以在菜单区域中使用鼠标滚轮来滚动长菜单。booleanfalse
adjustPadding自动调整菜单时的上下边距{ x: number, y: number } or number10
adjustPosition默认情况下,菜单将自动调整其位置,以防止溢出容器。如果允许菜单溢出容器,则可以将其设置为false。booleantrue
direction设置主菜单相对于坐标的弹出方向。如果 adjustPositiontrue ,则菜单会根据可用空间自动调整弹出方向。`'br''b''bl'
ignoreClickClassName若菜单项中的元素有这个className,单击它将忽略事件。string
menuTransitionProps设置菜单显示隐藏时的 Vue Transition 组件属性。TransitionProps
clickCloseOnOutside设置是否当用户点击其他位置时应关闭菜单。booleantrue
clickCloseClassName若菜单项中的元素有这个className,单击它将忽略事件,并且点击后会关闭菜单。string
updownButtonSpaceholder决定菜单项中的上/下按钮是否需要空白占位。设置这个变量的目的是因为有些菜单主题会在菜单上下添加空白边距,这一部分空白边距刚好可以放置上/下按钮。如果你的自定义主题菜单中没有空白边距,则可以设置此字段为上/下按提供要空白占位,防止遮挡菜单条目。booleanfalse
getContainer自定义菜单挂载容器。详情请参考HTMLElement or (() => HTMLElement)
onClose菜单关闭事件回调(通常在函数模式使用)。参数 lastClickItem 指示了触发关闭的菜单项(仅函数模式有效),如果用户没有点击菜单项而是点击其他地方关闭,则参数为 undefined`((lastClickItem: MenuItemundefined) => void)`
属性描述类型可选值默认值
label
菜单项名称,可传入VNode
string or VNode or ((label: string) => VNode)
icon菜单项图标,可传入VNodestring or VNode or ((icon: string) => VNode)
iconFontClass自定义图标字体类名stringiconfont
preserveIconWidth是否应为没有图标的菜单项保留固定宽度的图标区域boolean-true
svgIcon菜单项图标 svg,仅在 icon 为空时有效string
svgProps当使用 svg 图标时,自定义 svg 标签属性SVGAttributes
disabled是否禁用菜单项booleanfalse
hidden是否隐藏菜单项booleanfalse
checked是否选中菜单项booleanfalse
shortcut当前菜单项的快捷键指示,此快捷键只用于显示给用户看,快捷键的注册还是需要你自己处理string''
adjustSubMenuPosition默认情况下,子菜单将自动调整其位置,以防止溢出容器。如果允许菜单溢出容器,可以将其设置为falseboolean继承自 MenuOptions.adjustPosition
clickableWhenHasChildren指定当本菜单下有子菜单时,点击当前菜单是否触发点击事件booleanfalse
clickClose点击当前菜单项是否自动关闭整个菜单booleantrue
divided是否显示分割线。分割线显示逻辑
  • true or 'down': 分割线显示在菜单项下方。
  • 'up': 分割线显示在菜单项上方。
  • 'self': 把当前菜单项变成分割线。
  • false: 没有分割线。
boolean or 'up' or 'down' or 'self'false
customClass自定义子菜单classstring
minWidth子菜单最小宽度number or string100
maxWidth子菜单最大宽度number or string600
direction设置子菜单的弹出方向。如果 adjustPositiontrue ,则菜单会根据可用空间自动调整弹出方向。'br' or 'b' or 'bl' or 'tr' or 't' or 'tl' or 'l' or 'r'继承自 MenuOptions.direction
onClick菜单项点击事件Function()
onSubMenuClose子菜单关闭事件回调(() => void)
onSubMenuOpen子菜单打开事件回调(() => void)
customRender菜单项整体自定义渲染回调VNode or ((item: MenuItemRenderData) => VNode)
children子菜单结构信息MenuItem[]

Released under the MIT License.