当前位置:首页 > VUE

vue如何实现折叠效果

2026-02-22 11:09:25VUE

使用 CSS Transition 实现折叠效果

在 Vue 中可以通过动态绑定 class 或 style 结合 CSS transition 实现折叠效果。定义一个折叠容器,通过 v-if 或 v-show 控制显示隐藏,并添加过渡效果。

<template>
  <div>
    <button @click="toggle">Toggle</button>
    <transition name="collapse">
      <div v-show="isCollapsed" class="content">
        Content to be collapsed
      </div>
    </transition>
  </div>
</template>

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

<style>
.collapse-enter-active, .collapse-leave-active {
  transition: max-height 0.3s ease;
  overflow: hidden;
}

.collapse-enter, .collapse-leave-to {
  max-height: 0;
}

.content {
  max-height: 1000px; /* 设置足够大的值 */
}
</style>

使用 Vue Transition 组件

Vue 内置的 Transition 组件可以方便地实现各种过渡效果。通过定义 enter/leave 的 CSS 类名来控制折叠动画。

vue如何实现折叠效果

<template>
  <div>
    <button @click="isOpen = !isOpen">Toggle</button>
    <transition
      @before-enter="beforeEnter"
      @enter="enter"
      @leave="leave"
    >
      <div v-show="isOpen" class="item">Content</div>
    </transition>
  </div>
</template>

<script>
export default {
  data() {
    return {
      isOpen: false
    }
  },
  methods: {
    beforeEnter(el) {
      el.style.height = '0'
    },
    enter(el) {
      el.style.height = `${el.scrollHeight}px`
    },
    leave(el) {
      el.style.height = '0'
    }
  }
}
</script>

<style>
.item {
  overflow: hidden;
  transition: height 0.3s ease;
}
</style>

使用第三方库 vue-collapse

对于更复杂的折叠需求,可以使用专门为 Vue 设计的折叠组件库,如 vue-collapse。

安装:

vue如何实现折叠效果

npm install vue-collapse

使用示例:

<template>
  <div>
    <button @click="toggle">Toggle</button>
    <vue-collapse v-model="isOpen">
      <div class="content">
        Collapsible content
      </div>
    </vue-collapse>
  </div>
</template>

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

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

手风琴效果实现

多个折叠面板中同时只能展开一个,实现手风琴效果。

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

<script>
export default {
  data() {
    return {
      activeIndex: null,
      items: [
        { title: 'Panel 1', content: 'Content 1' },
        { title: 'Panel 2', content: 'Content 2' },
        { title: 'Panel 3', content: 'Content 3' }
      ]
    }
  },
  methods: {
    toggle(index) {
      this.activeIndex = this.activeIndex === index ? null : index
    }
  }
}
</script>

<style>
.panel {
  transition: all 0.3s ease;
  overflow: hidden;
}

.fade-enter-active, .fade-leave-active {
  transition: opacity 0.3s, max-height 0.3s;
}

.fade-enter, .fade-leave-to {
  opacity: 0;
  max-height: 0;
}
</style>

分享给朋友:

相关文章

vue实现效果

vue实现效果

Vue 实现常见效果的方法 数据绑定与响应式更新 Vue 的核心特性是数据绑定,通过 v-model 实现表单元素与数据的双向绑定。例如输入框与数据的实时同步: <input v-model=…

js实现滚动条效果

js实现滚动条效果

实现滚动条效果的方法 使用原生JavaScript实现滚动条 通过监听滚动事件,可以动态调整滚动条的位置和样式。以下是一个基础实现示例: // 获取DOM元素 const container = d…

vue如何实现mvvm

vue如何实现mvvm

Vue 的 MVVM 实现原理 Vue 通过数据绑定和响应式系统实现 MVVM(Model-View-ViewModel)模式。其核心在于将数据模型(Model)与视图(View)通过 ViewMod…

vue如何实现分离

vue如何实现分离

Vue 实现代码分离的方法 Vue 提供了多种方式实现代码分离,提升项目的可维护性和模块化程度。以下是常见的几种方法: 组件化开发 将功能拆分为独立的 Vue 组件,每个组件包含自己的模板、逻辑和样…

vue效果实现

vue效果实现

Vue 效果实现方法 Vue.js 提供了多种方式实现动态效果,包括过渡动画、状态驱动的 UI 变化以及第三方动画库集成。以下是常见效果的实现方案: 过渡动画 使用 Vue 内置的 <tran…

vue实现凤凰效果

vue实现凤凰效果

Vue 实现凤凰效果 凤凰效果通常指一种视觉动画,模拟凤凰展翅、火焰燃烧等动态效果。在 Vue 中实现这种效果,可以结合 CSS 动画、Canvas 或第三方动画库(如 GSAP)。以下是几种实现方式…