当前位置:首页 > VUE

vue组件实现折叠菜单

2026-02-21 02:58:48VUE

Vue 组件实现折叠菜单

基础实现方法

使用 Vue 的 v-ifv-show 控制菜单显隐,结合点击事件切换状态。示例代码:

vue组件实现折叠菜单

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

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

动态子菜单实现

通过递归组件实现多级嵌套菜单:

vue组件实现折叠菜单

<template>
  <div>
    <div 
      v-for="item in menuItems" 
      :key="item.title"
      class="menu-item"
    >
      <div @click="toggleSubMenu(item)">
        {{ item.title }}
        <span v-if="item.children">{{ item.isOpen ? '-' : '+' }}</span>
      </div>
      <div v-show="item.isOpen && item.children">
        <MenuComponent :menuItems="item.children" />
      </div>
    </div>
  </div>
</template>

<script>
export default {
  name: 'MenuComponent',
  props: ['menuItems'],
  methods: {
    toggleSubMenu(item) {
      if (item.children) {
        item.isOpen = !item.isOpen
      }
    }
  }
}
</script>

动画效果优化

添加过渡动画使折叠更平滑:

<template>
  <div>
    <button @click="toggle">Toggle</button>
    <transition name="slide">
      <div v-show="isOpen" class="menu-content">
        <!-- 菜单内容 -->
      </div>
    </transition>
  </div>
</template>

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

组件封装建议

  1. 通过 props 接收菜单数据
  2. 使用插槽允许自定义菜单项样式
  3. 提供事件钩子如 @open@close
  4. 支持键盘导航功能

完整组件示例:

<template>
  <div class="collapse-menu">
    <div 
      class="menu-header"
      @click="toggle"
      @keydown.enter="toggle"
      tabindex="0"
    >
      <slot name="header">{{ title }}</slot>
      <span class="arrow">{{ isOpen ? '▼' : '▶' }}</span>
    </div>
    <transition name="menu">
      <div v-show="isOpen" class="menu-body">
        <slot></slot>
      </div>
    </transition>
  </div>
</template>

<script>
export default {
  props: {
    title: String,
    isOpen: {
      type: Boolean,
      default: false
    }
  },
  methods: {
    toggle() {
      this.$emit('update:isOpen', !this.isOpen)
    }
  }
}
</script>

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

相关文章

vue实现左右菜单

vue实现左右菜单

实现左右菜单的基本思路 使用Vue实现左右菜单通常需要两个主要组件:左侧的导航菜单和右侧的内容区域。左侧菜单用于导航,右侧区域根据菜单选择动态展示内容。 创建左侧菜单组件 左侧菜单通常是一个列表,…

纯css制作下拉菜单

纯css制作下拉菜单

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

vue实现菜单调用

vue实现菜单调用

Vue 实现动态菜单调用的方法 使用路由配置生成菜单 在 Vue 项目中,可以通过路由配置自动生成菜单结构。路由配置通常包含 path、name、meta 等信息,这些信息可用于构建菜单项。 //…

elementui组件

elementui组件

ElementUI 组件概述 ElementUI 是一套基于 Vue.js 的桌面端组件库,提供丰富的 UI 组件,适用于快速开发中后台系统。以下是其核心组件分类及典型用法。 基础组件 Button…

vue菜单实现

vue菜单实现

实现Vue菜单的基本方法 使用Vue.js创建菜单可以通过多种方式实现,包括使用原生Vue组件、第三方UI库或自定义解决方案。以下是几种常见的实现方法: 使用原生Vue组件 创建基本的菜单结构可以…

jquery菜单

jquery菜单

以下是关于使用jQuery创建交互式菜单的几种常见方法及实现示例: 基础下拉菜单实现 通过jQuery的slideToggle和toggleClass实现简单下拉效果: $('.menu-item…