当前位置:首页 > 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,提供更多功能(如手风琴效果)。

vue实现折叠效果

安装库:

npm install vue-collapse

示例代码:

vue实现折叠效果

<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 实现安全免登录的方案 免登录功能通常通过持久化认证状态(如 Token)实现,但需兼顾安全性。以下是基于 Vue 的常见实现方案: 基于 Token 的免登录 登录成功后存储 Token…

vue实现复选

vue实现复选

Vue 实现复选框 在 Vue 中实现复选框可以通过 v-model 指令绑定数据,同时结合 input 元素的 type="checkbox" 属性来实现。以下是几种常见的实现方式: 单个复选框…

vue实现海报

vue实现海报

Vue 实现海报生成方案 使用 html2canvas 库 html2canvas 是一个将 HTML 元素转换为 Canvas 的库,适合将 Vue 组件渲染为海报图片 安装依赖: npm in…

实现vue datepicker

实现vue datepicker

安装依赖 使用 vue-datepicker 或第三方库如 v-calendar 或 vue2-datepicker。以 vue2-datepicker 为例: npm install vue2…

vue多选实现

vue多选实现

Vue 多选实现方法 基础实现(v-model + multiple) 在 Vue 中实现多选可以通过 <select> 元素的 multiple 属性结合 v-model 完成。v-mo…

vue实现选择

vue实现选择

Vue 实现选择功能的方法 在 Vue 中实现选择功能可以通过多种方式完成,以下介绍几种常见的实现方法。 使用 v-model 绑定单选 通过 v-model 可以轻松实现单选功能。以下是一个简单的…