当前位置:首页 > VUE

vue组件实现折叠菜单

2026-01-20 10:56:08VUE

实现折叠菜单的步骤

使用 Vue 的 v-showv-if 控制菜单显示

在 Vue 组件中,可以通过 v-showv-if 指令来控制菜单的显示与隐藏。v-show 通过 CSS 的 display 属性切换,适合频繁切换的场景;v-if 会销毁和重建 DOM,适合不频繁切换的场景。

<template>
  <div>
    <button @click="toggleMenu">Toggle Menu</button>
    <div v-show="isMenuVisible">
      <ul>
        <li>Menu Item 1</li>
        <li>Menu Item 2</li>
        <li>Menu Item 3</li>
      </ul>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      isMenuVisible: false
    };
  },
  methods: {
    toggleMenu() {
      this.isMenuVisible = !this.isMenuVisible;
    }
  }
};
</script>

添加过渡动画效果

通过 Vue 的 <transition> 组件可以为折叠菜单添加平滑的动画效果。使用 CSS 过渡或动画类名实现展开和折叠的动画。

vue组件实现折叠菜单

<template>
  <div>
    <button @click="toggleMenu">Toggle Menu</button>
    <transition name="slide">
      <div v-show="isMenuVisible" class="menu">
        <ul>
          <li>Menu Item 1</li>
          <li>Menu Item 2</li>
          <li>Menu Item 3</li>
        </ul>
      </div>
    </transition>
  </div>
</template>

<style>
.slide-enter-active, .slide-leave-active {
  transition: max-height 0.5s ease;
}
.slide-enter-from, .slide-leave-to {
  max-height: 0;
  overflow: hidden;
}
.slide-enter-to, .slide-leave-from {
  max-height: 500px;
}
</style>

使用动态组件实现多级菜单

对于多级折叠菜单,可以通过递归组件或动态组件的方式实现。每个子菜单可以作为一个独立的组件,通过 v-for 动态渲染。

<template>
  <div>
    <div v-for="item in menuItems" :key="item.id">
      <div @click="toggleSubMenu(item)">
        {{ item.title }}
        <span v-if="item.children">{{ item.isOpen ? '−' : '+' }}</span>
      </div>
      <transition name="slide">
        <div v-show="item.isOpen && item.children">
          <ul>
            <li v-for="child in item.children" :key="child.id">{{ child.title }}</li>
          </ul>
        </div>
      </transition>
    </div>
  </div>
</template>

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

使用第三方库简化实现

vue组件实现折叠菜单

如果需要更复杂的功能(如手风琴效果、多级嵌套等),可以使用第三方库如 vue-accessible-accordionelement-ui 的折叠面板组件。

安装 element-ui

npm install element-ui

使用 el-collapse 组件:

<template>
  <el-collapse v-model="activeNames">
    <el-collapse-item title="Menu 1" name="1">
      <div>Menu Item 1</div>
      <div>Menu Item 2</div>
    </el-collapse-item>
    <el-collapse-item title="Menu 2" name="2">
      <div>Menu Item 3</div>
    </el-collapse-item>
  </el-collapse>
</template>

<script>
export default {
  data() {
    return {
      activeNames: ['1']
    };
  }
};
</script>

注意事项

  • 如果菜单内容较多,使用 max-height 过渡动画比直接操作 height 更灵活。
  • 多级菜单时,注意管理每个子菜单的状态(如 isOpen),避免状态混乱。
  • 使用第三方库时,注意按需引入以减小打包体积。

标签: 组件菜单
分享给朋友:

相关文章

如何制作css导航菜单

如何制作css导航菜单

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

vue实现组件循环图片

vue实现组件循环图片

Vue 实现组件循环图片的方法 在 Vue 中实现组件循环图片通常可以通过 v-for 指令结合动态数据绑定完成。以下是几种常见的实现方式: 使用静态图片路径数组 假设有一组本地图片路径,可以通过数…

vue 菜单实现

vue 菜单实现

Vue 菜单实现方法 基于路由的动态菜单 在 Vue 项目中,可以利用 Vue Router 实现动态菜单。首先定义路由配置,包含菜单所需的元信息(如标题、图标等)。 const routes =…

css菜单制作

css菜单制作

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

vue实现组件跟随

vue实现组件跟随

Vue 实现组件跟随效果 实现组件跟随效果通常需要监听鼠标或触摸事件,动态更新组件位置。以下是几种常见实现方式: 使用鼠标事件绑定 <template> <div class=…

vue表格组件实现

vue表格组件实现

Vue表格组件实现 基础表格实现 使用el-table组件实现基础表格功能。安装Element UI后,引入el-table和el-table-column组件。 <template>…