当前位置:首页 > VUE

vue实现菜单效果

2026-03-09 22:52:42VUE

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-show="item.isOpen" class="submenu">
        <div v-for="subItem in item.children" :key="subItem.id">
          {{ subItem.title }}
        </div>
      </div>
    </div>
  </div>
</template>

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

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

递归组件实现多级菜单

对于复杂的多级菜单,可以使用递归组件实现。

vue实现菜单效果

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

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

export default {
  components: {
    MenuItem
  },
  data() {
    return {
      menuData: [
        {
          id: 1,
          title: '一级菜单',
          children: [
            {
              id: 11,
              title: '二级菜单',
              children: [
                { id: 111, title: '三级菜单' }
              ]
            }
          ]
        }
      ]
    }
  }
}
</script>

MenuItem.vue 组件:

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

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

使用 Vue Router 实现路由菜单

结合 Vue Router 可以创建导航菜单。

vue实现菜单效果

<template>
  <nav>
    <router-link 
      v-for="route in routes" 
      :key="route.path" 
      :to="route.path"
    >
      {{ route.meta.title }}
    </router-link>
  </nav>
</template>

<script>
export default {
  computed: {
    routes() {
      return this.$router.options.routes.filter(
        route => route.meta && route.meta.showInMenu
      )
    }
  }
}
</script>

使用第三方库

对于更复杂的需求,可以考虑使用以下 Vue 菜单组件库:

  • Element UI 的 el-menu
  • Ant Design Vue 的 a-menu
  • Vue Context Menu 实现右键菜单

动画效果

为菜单添加过渡动画增强用户体验。

<template>
  <transition name="slide">
    <div class="menu" v-show="isVisible">
      <!-- 菜单内容 -->
    </div>
  </transition>
</template>

<style>
.slide-enter-active, .slide-leave-active {
  transition: all 0.3s ease;
}
.slide-enter, .slide-leave-to {
  transform: translateX(-100%);
}
</style>

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

相关文章

vue实现导航菜单

vue实现导航菜单

Vue 实现导航菜单的方法 基础路由导航实现 在 Vue 项目中,使用 vue-router 可以轻松实现导航菜单功能。首先安装并配置路由: npm install vue-router 在 rou…

css二级菜单制作

css二级菜单制作

使用纯CSS实现二级菜单 通过嵌套HTML结构和CSS选择器实现二级菜单的显示与隐藏效果。以下是一个基础实现方案: HTML结构: <ul class="menu"> <li…

css菜单制作

css菜单制作

CSS 菜单制作方法 水平导航菜单 使用 display: inline-block 或 flexbox 可以轻松创建水平导航菜单。以下是一个基本示例: <nav> <ul c…

jquery 效果

jquery 效果

jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画和 Ajax 交互。jQuery 提供了丰富的效果(Effects)功能,可以轻松实现元素的动态显…

纯css制作tab菜单

纯css制作tab菜单

纯CSS制作Tab菜单的方法 使用radio input控制Tab切换 通过<input type="radio">和<label>元素配合:checked伪类实现Tab切换效…

h5页面滑动效果实现

h5页面滑动效果实现

实现H5页面滑动效果的方法 H5页面滑动效果可以通过多种方式实现,包括原生JavaScript、CSS动画或第三方库。以下是几种常见的方法: 使用CSS Scroll Snap CSS Scroll…