当前位置:首页 > 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),避免状态混乱。
  • 使用第三方库时,注意按需引入以减小打包体积。

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

相关文章

vue实现组件

vue实现组件

Vue 组件实现基础 Vue 组件是可复用的 Vue 实例,用于封装 UI 和逻辑。通过 .vue 文件或直接注册组件实现。 单文件组件 (SFC) 示例 <template>…

vue实现菜单定位

vue实现菜单定位

实现菜单定位的方法 在Vue中实现菜单定位功能,可以通过监听滚动事件或使用Intersection Observer API来判断当前显示的菜单项,并高亮对应的导航链接。以下是几种常见的实现方式:…

vue轮播组件实现

vue轮播组件实现

Vue 轮播组件实现方法 使用第三方库(如 Swiper) 安装 Swiper 库: npm install swiper 在 Vue 组件中引入 Swiper: <template…

vue菜单tab实现

vue菜单tab实现

实现Vue菜单Tab的步骤 在Vue中实现菜单Tab功能,可以通过动态组件或条件渲染来实现。以下是几种常见的方法: 使用动态组件 动态组件允许根据当前选中的Tab动态切换显示内容。定义一个组件数组…

纯css制作下拉菜单

纯css制作下拉菜单

纯CSS下拉菜单实现方法 通过CSS的:hover伪类和display属性可以实现纯CSS下拉菜单,无需JavaScript。以下是具体实现方式: HTML结构示例: <nav clas…

vue实现下拉菜单

vue实现下拉菜单

实现下拉菜单的基本结构 使用 Vue 的 v-show 或 v-if 控制下拉菜单的显示与隐藏。通过点击按钮或父元素触发下拉状态切换。 <template> <div cl…