当前位置:首页 > VUE

vue实现菜单效果

2026-02-18 09:43:49VUE

使用 Vue 实现菜单效果

基础菜单结构

通过 Vue 的 v-for 动态渲染菜单项,结合 v-ifv-show 控制子菜单的显示与隐藏。

<template>
  <div class="menu">
    <div 
      v-for="item in menuItems" 
      :key="item.id"
      @click="toggleSubMenu(item)"
    >
      {{ item.title }}
      <div v-if="item.showChildren" class="submenu">
        <div v-for="child in item.children" :key="child.id">
          {{ child.title }}
        </div>
      </div>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      menuItems: [
        {
          id: 1,
          title: '菜单1',
          showChildren: false,
          children: [
            { id: 11, title: '子菜单1' },
            { id: 12, title: '子菜单2' }
          ]
        },
        {
          id: 2,
          title: '菜单2',
          showChildren: false,
          children: [
            { id: 21, title: '子菜单3' }
          ]
        }
      ]
    }
  },
  methods: {
    toggleSubMenu(item) {
      item.showChildren = !item.showChildren;
    }
  }
}
</script>

<style>
.menu {
  width: 200px;
}
.submenu {
  padding-left: 20px;
}
</style>

嵌套菜单实现

对于多级嵌套菜单,可以使用递归组件实现。

<template>
  <div class="menu">
    <menu-item 
      v-for="item in menuItems" 
      :key="item.id" 
      :item="item"
    />
  </div>
</template>

<script>
import MenuItem from './MenuItem.vue';

export default {
  components: { MenuItem },
  data() {
    return {
      menuItems: [
        {
          id: 1,
          title: '菜单1',
          children: [
            { 
              id: 11, 
              title: '子菜单1',
              children: [
                { id: 111, title: '子子菜单1' }
              ]
            }
          ]
        }
      ]
    }
  }
}
</script>

MenuItem.vue 组件:

vue实现菜单效果

<template>
  <div>
    <div @click="toggle">
      {{ item.title }}
    </div>
    <div v-if="showChildren" class="submenu">
      <menu-item 
        v-for="child in item.children" 
        :key="child.id" 
        :item="child"
      />
    </div>
  </div>
</template>

<script>
export default {
  name: 'MenuItem',
  props: ['item'],
  data() {
    return {
      showChildren: false
    }
  },
  methods: {
    toggle() {
      this.showChildren = !this.showChildren;
    }
  }
}
</script>

使用 Vue Router 实现路由菜单

结合 Vue Router 实现点击菜单跳转路由。

<template>
  <div class="menu">
    <router-link 
      v-for="item in menuItems" 
      :key="item.path" 
      :to="item.path"
    >
      {{ item.title }}
    </router-link>
  </div>
</template>

<script>
export default {
  data() {
    return {
      menuItems: [
        { path: '/home', title: '首页' },
        { path: '/about', title: '关于' }
      ]
    }
  }
}
</script>

动画效果

为菜单添加过渡动画效果,提升用户体验。

vue实现菜单效果

<template>
  <div>
    <div @click="toggle">菜单</div>
    <transition name="slide">
      <div v-if="show" class="submenu">
        <div>子菜单1</div>
        <div>子菜单2</div>
      </div>
    </transition>
  </div>
</template>

<style>
.slide-enter-active, .slide-leave-active {
  transition: all 0.3s ease;
}
.slide-enter, .slide-leave-to {
  opacity: 0;
  transform: translateY(-10px);
}
</style>

第三方组件库

使用 Element UI 或 Ant Design Vue 等 UI 库快速实现菜单。

Element UI 示例:

<template>
  <el-menu>
    <el-submenu index="1">
      <template slot="title">菜单1</template>
      <el-menu-item index="1-1">子菜单1</el-menu-item>
    </el-submenu>
  </el-menu>
</template>

<script>
import { ElMenu, ElMenuItem, ElSubmenu } from 'element-ui';

export default {
  components: {
    ElMenu,
    ElMenuItem,
    ElSubmenu
  }
}
</script>

标签: 菜单效果
分享给朋友:

相关文章

vue实现气泡效果

vue实现气泡效果

实现气泡效果的方法 在Vue中实现气泡效果可以通过CSS动画、第三方库或自定义组件完成。以下是几种常见方法: 使用纯CSS动画 通过CSS的@keyframes和transform属性创建气泡上升动…

vue实现凤凰效果

vue实现凤凰效果

Vue 实现凤凰效果 凤凰效果通常指一种视觉动画,模拟凤凰展翅、火焰燃烧等动态效果。在 Vue 中实现这种效果,可以结合 CSS 动画、Canvas 或第三方动画库(如 GSAP)。以下是几种实现方式…

vue 实现toogle效果

vue 实现toogle效果

使用 v-if 和 v-else 实现切换 通过 Vue 的指令 v-if 和 v-else 可以轻松实现元素的显示与隐藏切换。 <template> <button @c…

vue实现过度效果

vue实现过度效果

Vue 过渡效果实现方法 Vue 提供了内置的 <transition> 和 <transition-group> 组件,用于在元素或组件进入/离开 DOM 时应用过渡效果。…

vue实现日历效果

vue实现日历效果

Vue实现日历效果的方法 使用第三方库 Vue生态中有多个成熟的日历组件库,如v-calendar或vue2-calendar,可以快速实现日历功能。安装后直接引入组件即可使用。 npm i…

vue实现水印效果

vue实现水印效果

实现水印效果的几种方法 在Vue中实现水印效果可以通过多种方式,以下是几种常见的方法: 使用CSS背景图 通过CSS的background-image属性可以实现简单的水印效果。定义一个包含水印文本…