当前位置:首页 > 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 组件:

<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>

动画效果

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

<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 示例:

vue实现菜单效果

<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>

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

相关文章

如何制作css导航菜单

如何制作css导航菜单

创建基本HTML结构 导航菜单的基础是HTML结构。使用<nav>标签包裹无序列表<ul>,每个菜单项用<li>标签表示,链接用<a>标签。 <…

vue实现突出效果

vue实现突出效果

Vue 实现突出效果的方法 在 Vue 中实现突出效果通常涉及动态样式绑定、动画过渡或第三方库的使用。以下是几种常见实现方式: 动态类名绑定 通过 v-bind:class 或简写 :class 实…

vue实现导航菜单

vue实现导航菜单

Vue 实现导航菜单的方法 使用 Vue Router 实现基本导航 在 Vue 项目中安装 vue-router,通过路由配置实现页面跳转。路由配置文件中定义路径和组件映射,导航菜单通过 <r…

vue实现菜单搜索

vue实现菜单搜索

实现思路 在Vue中实现菜单搜索功能,通常需要结合输入框的实时监听、菜单数据的过滤以及结果的动态展示。核心逻辑包括监听用户输入、过滤菜单数据、高亮匹配关键词。 基本实现步骤 创建搜索输入框 在模板中…

react如何添加效果

react如何添加效果

React 添加动画效果的方法 使用 CSS 过渡动画 在 React 组件中直接通过 className 或 style 属性应用 CSS 过渡效果。定义 CSS 类包含 transition 属性…

vue实现级联菜单

vue实现级联菜单

实现级联菜单的基本思路 Vue中实现级联菜单通常需要以下关键点:数据结构的组织、组件间的通信、动态渲染子菜单。一般采用递归组件或逐层渲染的方式实现。 数据结构设计 级联菜单的数据通常为嵌套结构,例如…