Skip to content

Menu 菜单

赛博朋克风格的菜单组件,支持横向/纵向布局、无限层级嵌套、四种主题配色和四种视觉特效。

基本用法

  • 首页
  • 产品
  • 关于我们
  • 联系我们
vue
<template>
  <cyber-menu v-model="activeMenu" :items="menuItems" />
</template>

<script setup>
import { ref } from 'vue'

const activeMenu = ref('home')

const menuItems = [
  { label: '首页', value: 'home' },
  { label: '产品', value: 'products' },
  { label: '关于我们', value: 'about' },
  { label: '联系我们', value: 'contact' }
]
</script>

横向菜单

设置 direction="horizontal" 启用横向布局,子菜单向下展开。

  • 首页
  • 产品
  • 关于我们
  • 联系我们
vue
<cyber-menu v-model="activeMenu" :items="menuItems" direction="horizontal" />

多级菜单

支持无限层级嵌套,通过 children 字段定义子菜单。

  • 文件
    • 新建
    • 打开
    • 保存
  • 编辑
    • 撤销
    • 重做
    • 剪切
    • 复制
    • 粘贴
vue
<template>
  <cyber-menu
    v-model="activeMenu"
    :items="multiLevelMenu"
    :expanded-values="['file', 'edit']"
  />
</template>

<script setup>
const multiLevelMenu = [
  {
    label: '文件',
    value: 'file',
    children: [
      { label: '新建', value: 'new' },
      { label: '打开', value: 'open' },
      { label: '保存', value: 'save' }
    ]
  },
  {
    label: '编辑',
    value: 'edit',
    children: [
      { label: '撤销', value: 'undo' },
      { label: '重做', value: 'redo' }
    ]
  }
]
</script>

主题

四种赛博朋克主题:neonterminalmatrixhologram

  • 首页
  • 产品
  • 关于我们
  • 联系我们
  • 首页
  • 产品
  • 关于我们
  • 联系我们
  • 首页
  • 产品
  • 关于我们
  • 联系我们
  • 首页
  • 产品
  • 关于我们
  • 联系我们
vue
<cyber-menu :items="items" theme="neon" />
<cyber-menu :items="items" theme="terminal" />
<cyber-menu :items="items" theme="matrix" />
<cyber-menu :items="items" theme="hologram" />

主题配色

主题主色风格
neon#00e6f6霓虹蓝青
terminal#47f26b终端绿色
matrix#00ff41矩阵黑绿
hologram#ff40ff全息紫红

特效

四种视觉特效:noneglitchscanlinepulse

  • 首页
  • 产品
  • 关于我们
  • 联系我们
  • 首页
  • 产品
  • 关于我们
  • 联系我们
  • 首页
  • 产品
  • 关于我们
  • 联系我们
  • 首页
  • 产品
  • 关于我们
  • 联系我们
vue
<cyber-menu :items="items" theme="neon" effect="none" />
<cyber-menu :items="items" theme="neon" effect="glitch" />
<cyber-menu :items="items" theme="neon" effect="scanline" />
<cyber-menu :items="items" theme="neon" effect="pulse" />

禁用项

通过菜单数据的 disabled 字段禁用特定菜单项。

  • 正常选项
  • 禁用选项
  • 另一个选项
vue
<template>
  <cyber-menu v-model="activeMenu" :items="disabledMenu" />
</template>

<script setup>
const disabledMenu = [
  { label: '正常选项', value: 'normal' },
  { label: '禁用选项', value: 'disabled', disabled: true },
  { label: '另一个选项', value: 'another' }
]
</script>

API

Props

参数说明类型可选值默认值
modelValue / v-model当前选中值string | number''
items菜单数据MenuItem[][]
direction布局方向stringvertical / horizontalvertical
theme主题配色stringneon / terminal / matrix / hologramneon
effect视觉特效stringnone / glitch / scanline / pulsenone
expandedValues展开的子菜单值(受控)(string | number)[][]

Events

事件名说明回调参数
update:modelValue选中值变化(value: string | number)
change选中值变化(value: string | number)
select选中菜单项(item: MenuItem)
update:expandedValues展开项变化(values: (string | number)[])
字段说明类型必填
label菜单项文本string
value菜单项唯一值string | number
icon图标 CSS 类名string
disabled是否禁用boolean
children子菜单项MenuItem[]

示例代码

完整演示见:test/src/conponents/menu-test.vue

Relcased under the Mit Lincense.