vue 实现折叠
Vue 实现折叠功能的方法
在 Vue 中实现折叠功能可以通过多种方式完成,以下是几种常见的实现方法:
使用 v-if 或 v-show 控制显示隐藏
通过绑定一个布尔值变量,结合 v-if 或 v-show 指令实现内容的折叠与展开。v-if 会完全销毁或重建 DOM 元素,而 v-show 仅通过 CSS 的 display 属性控制显示隐藏。
<template>
<div>
<button @click="toggle">Toggle</button>
<div v-show="isCollapsed">折叠内容</div>
</div>
</template>
<script>
export default {
data() {
return {
isCollapsed: false,
};
},
methods: {
toggle() {
this.isCollapsed = !this.isCollapsed;
},
},
};
</script>
使用 CSS Transition 实现动画效果
如果需要平滑的折叠动画效果,可以结合 CSS Transition 或 Vue 的 <transition> 组件。

<template>
<div>
<button @click="toggle">Toggle</button>
<transition name="fade">
<div v-show="isCollapsed" class="collapsible-content">折叠内容</div>
</transition>
</div>
</template>
<script>
export default {
data() {
return {
isCollapsed: false,
};
},
methods: {
toggle() {
this.isCollapsed = !this.isCollapsed;
},
},
};
</script>
<style>
.fade-enter-active, .fade-leave-active {
transition: opacity 0.5s, max-height 0.5s;
max-height: 500px;
overflow: hidden;
}
.fade-enter, .fade-leave-to {
opacity: 0;
max-height: 0;
}
.collapsible-content {
padding: 10px;
background: #f0f0f0;
}
</style>
使用第三方库(如 vue-collapse)
如果需要更复杂的功能(如手风琴效果),可以使用第三方库如 vue-collapse。
安装:

npm install vue-collapse
示例代码:
<template>
<div>
<button @click="toggle">Toggle</button>
<vue-collapse v-model="isCollapsed">
<div class="content">折叠内容</div>
</vue-collapse>
</div>
</template>
<script>
import { VueCollapse } from 'vue-collapse';
export default {
components: {
VueCollapse,
},
data() {
return {
isCollapsed: false,
};
},
methods: {
toggle() {
this.isCollapsed = !this.isCollapsed;
},
},
};
</script>
动态高度折叠
如果需要动态计算内容高度并实现平滑折叠,可以通过 JavaScript 动态设置 max-height。
<template>
<div>
<button @click="toggle">Toggle</button>
<div
ref="content"
class="collapsible-content"
:style="{ maxHeight: isCollapsed ? contentHeight + 'px' : '0' }"
>
折叠内容
</div>
</div>
</template>
<script>
export default {
data() {
return {
isCollapsed: false,
contentHeight: 0,
};
},
mounted() {
this.contentHeight = this.$refs.content.scrollHeight;
},
methods: {
toggle() {
this.isCollapsed = !this.isCollapsed;
},
},
};
</script>
<style>
.collapsible-content {
overflow: hidden;
transition: max-height 0.3s ease;
}
</style>
总结
- 简单折叠:使用
v-show或v-if。 - 动画效果:结合
<transition>或 CSS Transition。 - 复杂需求:使用第三方库如
vue-collapse。 - 动态高度:通过 JavaScript 计算高度并动态设置样式。






