当前位置:首页 > VUE

vue实现折叠效果

2026-01-16 17:56:23VUE

使用 v-showv-if 实现基础折叠

通过 Vue 的指令 v-showv-if 控制元素的显示与隐藏。v-show 通过 CSS 的 display 属性切换,v-if 直接操作 DOM。

<template>
  <div>
    <button @click="isCollapsed = !isCollapsed">切换折叠</button>
    <div v-show="!isCollapsed">可折叠的内容</div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      isCollapsed: false
    };
  }
};
</script>

结合 CSS 过渡动画

通过 Vue 的 <transition> 组件和 CSS 实现平滑的折叠动画效果。

<template>
  <div>
    <button @click="isCollapsed = !isCollapsed">切换折叠</button>
    <transition name="slide">
      <div v-show="!isCollapsed" class="content">带动画的折叠内容</div>
    </transition>
  </div>
</template>

<script>
export default {
  data() {
    return {
      isCollapsed: false
    };
  }
};
</script>

<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: 1000px;
}
.content {
  overflow: hidden;
}
</style>

使用第三方库(如 vue-collapse

对于更复杂的折叠需求,可以集成第三方库如 vue-collapse,提供更多功能(如手风琴效果)。

安装库:

npm install vue-collapse

示例代码:

<template>
  <div>
    <vue-collapse v-model="activePanels">
      <vue-collapse-item title="标题1" name="1">内容1</vue-collapse-item>
      <vue-collapse-item title="标题2" name="2">内容2</vue-collapse-item>
    </vue-collapse>
  </div>
</template>

<script>
import { VueCollapse, VueCollapseItem } from 'vue-collapse';

export default {
  components: { VueCollapse, VueCollapseItem },
  data() {
    return {
      activePanels: ['1']
    };
  }
};
</script>

动态生成折叠面板

通过 v-for 动态渲染多个折叠项,并管理各自的状态。

<template>
  <div>
    <div v-for="(item, index) in items" :key="index">
      <button @click="toggleItem(index)">{{ item.title }}</button>
      <div v-show="item.isOpen">{{ item.content }}</div>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: [
        { title: '标题1', content: '内容1', isOpen: false },
        { title: '标题2', content: '内容2', isOpen: false }
      ]
    };
  },
  methods: {
    toggleItem(index) {
      this.items[index].isOpen = !this.items[index].isOpen;
    }
  }
};
</script>

手风琴效果(单一展开)

确保每次只展开一个折叠项,通过维护当前展开的索引实现。

<template>
  <div>
    <div v-for="(item, index) in items" :key="index">
      <button @click="setActive(index)">{{ item.title }}</button>
      <div v-show="activeIndex === index">{{ item.content }}</div>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      activeIndex: null,
      items: [
        { title: '标题1', content: '内容1' },
        { title: '标题2', content: '内容2' }
      ]
    };
  },
  methods: {
    setActive(index) {
      this.activeIndex = this.activeIndex === index ? null : index;
    }
  }
};
</script>

vue实现折叠效果

标签: 效果vue
分享给朋友:

相关文章

vue实现适老化样式

vue实现适老化样式

Vue 实现适老化样式的关键方法 全局字体与字号调整 通过 CSS 变量或主题配置统一放大基础字号,建议正文不小于 18px,标题更大。在 App.vue 中设置全局样式: :root { --…

vue登录业务的实现

vue登录业务的实现

实现登录业务的基本流程 在Vue中实现登录业务通常涉及前端界面设计、表单验证、API请求交互、状态管理以及路由控制等环节。以下是核心实现步骤: 登录表单设计与验证 创建包含用户名和密码输入框的登录组…

vue实现本地数据存储

vue实现本地数据存储

使用 localStorage 或 sessionStorage Vue 中可以直接调用浏览器提供的 localStorage 或 sessionStorage API 进行数据存储。localSto…

vue路由实现内部切换

vue路由实现内部切换

Vue 路由实现内部切换的方法 Vue Router 是 Vue.js 官方的路由管理器,用于实现单页应用(SPA)的页面切换。以下是几种常见的内部路由切换方式: 使用 <router-li…

vue懒加载实现难吗

vue懒加载实现难吗

vue懒加载的实现难度 Vue懒加载的实现并不复杂,核心逻辑是通过动态导入(Dynamic Imports)和路由配置或组件异步加载完成。以下是具体实现方法: 路由懒加载实现 在Vue Rout…

vue实现a

vue实现a

Vue 实现 A 功能的方法 在 Vue 中实现 A 功能可以通过多种方式,具体取决于 A 功能的具体需求。以下是几种常见的实现方法: 使用 Vue 组件 通过创建自定义组件来实现 A 功能。组件可…