当前位置:首页 > VUE

vue动画实现折叠

2026-02-17 01:18:37VUE

使用 Vue Transition 实现折叠动画

在 Vue 中可以通过 <transition> 组件和 CSS 过渡实现折叠效果。核心思路是动态切换元素的高度,从 0 到 auto 或反之。

<template>
  <div>
    <button @click="isOpen = !isOpen">Toggle</button>
    <transition name="fold">
      <div v-show="isOpen" class="content">
        <!-- 内容区域 -->
      </div>
    </transition>
  </div>
</template>

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

<style>
.fold-enter-active, .fold-leave-active {
  transition: all 0.3s ease;
  overflow: hidden;
}

.fold-enter-from, .fold-leave-to {
  height: 0;
  opacity: 0;
}

.fold-enter-to, .fold-leave-from {
  height: auto;
  opacity: 1;
}
</style>

使用 CSS Grid 实现平滑过渡

当内容高度不确定时,可以使用 CSS grid 布局实现更平滑的折叠动画:

.fold-enter-active, .fold-leave-active {
  display: grid;
  grid-template-rows: 1fr;
  transition: grid-template-rows 0.3s ease;
}

.fold-enter-from, .fold-leave-to {
  grid-template-rows: 0fr;
}

.content {
  overflow: hidden;
}

使用 VueUse 的 useTransition 实现

对于更复杂的动画控制,可以使用 VueUse 库的 useTransition

<template>
  <div :style="{ height: `${height}px` }" class="transition-all overflow-hidden">
    <!-- 内容 -->
  </div>
</template>

<script setup>
import { useTransition } from '@vueuse/core'

const isOpen = ref(false)
const contentRef = ref(null)

const height = useTransition(
  isOpen,
  {
    duration: 300,
    transition: [0.25, 0.1, 0.25, 1]
  }
)
</script>

使用 Collapse 组件库

现有 UI 库如 Element Plus 提供了现成的 Collapse 组件:

<template>
  <el-collapse v-model="activeNames">
    <el-collapse-item title="标题" name="1">
      <!-- 内容 -->
    </el-collapse-item>
  </el-collapse>
</template>

<script setup>
const activeNames = ref(['1'])
</script>

性能优化建议

避免在折叠动画中使用 height: auto,这会导致浏览器重排影响性能。推荐测量实际内容高度后使用固定值过渡。

使用 will-change: transform 可以提示浏览器优化动画性能。

对于移动端,考虑减少动画持续时间到 200-250ms 以获得更快的响应感。

vue动画实现折叠

标签: 动画vue
分享给朋友:

相关文章

vue搜索过后实现分页

vue搜索过后实现分页

Vue 实现搜索后分页功能 数据绑定与搜索逻辑 在 Vue 组件中定义必要的数据属性: data() { return { searchQuery: '', currentPa…

课程表vue实现

课程表vue实现

实现课程表的Vue组件 创建课程表需要设计数据结构、布局和交互逻辑。以下是一个基于Vue 3的实现方案: 数据结构设计 const timetableData = ref([ { ti…

vue实现visual

vue实现visual

Vue 实现可视化(Visual)的常见方法 在 Vue 中实现可视化通常涉及数据可视化库的集成,以下是几种主流方案: 使用 ECharts ECharts 是一个强大的 JavaScript…

vue实现图集

vue实现图集

Vue 实现图集的方法 在 Vue 中实现图集功能可以通过多种方式完成,以下是一些常见的方法和实现步骤。 使用第三方库(如 vue-image-lightbox) 安装 vue-image-lig…

vue实现tag

vue实现tag

Vue 实现标签(Tag)功能 在 Vue 中实现标签(Tag)功能可以通过多种方式完成,以下是一些常见的方法和实现步骤: 使用动态组件和 v-for 通过 v-for 指令动态渲染标签列表,结合…

vue 实现递归

vue 实现递归

Vue 实现递归组件的方法 在 Vue 中实现递归组件通常用于处理树形结构数据,例如菜单、评论列表或文件目录。以下是实现递归组件的关键步骤: 定义递归组件 递归组件需要设置 name 属性,以便在模…