当前位置:首页 > VUE

vue 实现展开动画

2026-02-21 03:54:11VUE

Vue 实现展开动画的方法

使用 Vue Transition 组件

Vue 内置的 <transition> 组件可以方便地实现展开/折叠动画效果。通过设置 CSS 过渡或动画类名,控制元素高度的变化。

vue 实现展开动画

<template>
  <div>
    <button @click="isExpanded = !isExpanded">Toggle</button>
    <transition name="expand">
      <div v-show="isExpanded" class="content">
        Content to be expanded
      </div>
    </transition>
  </div>
</template>

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

<style>
.expand-enter-active, .expand-leave-active {
  transition: height 0.3s ease;
  overflow: hidden;
}
.expand-enter, .expand-leave-to {
  height: 0 !important;
}
</style>

动态计算高度

如果内容高度不确定,可以通过 JavaScript 动态获取高度并设置过渡效果。

vue 实现展开动画

<template>
  <div>
    <button @click="toggle">Toggle</button>
    <div class="container" :style="{ height: currentHeight + 'px' }">
      <div ref="content" class="content">
        Content with dynamic height
      </div>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      isExpanded: false,
      currentHeight: 0
    }
  },
  methods: {
    toggle() {
      this.isExpanded = !this.isExpanded
      this.currentHeight = this.isExpanded ? this.$refs.content.scrollHeight : 0
    }
  }
}
</script>

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

使用第三方动画库

可以结合第三方动画库如 Animate.css 或 GSAP 实现更复杂的展开动画效果。

<template>
  <div>
    <button @click="isExpanded = !isExpanded">Toggle</button>
    <transition
      enter-active-class="animate__animated animate__fadeInDown"
      leave-active-class="animate__animated animate__fadeOutUp"
    >
      <div v-show="isExpanded" class="content">
        Content with Animate.css
      </div>
    </transition>
  </div>
</template>

<script>
import 'animate.css'
export default {
  data() {
    return {
      isExpanded: false
    }
  }
}
</script>

使用 Vue 插件

可以安装专门的 Vue 过渡插件如 vue-slide-up-down 或 vue-collapse 来简化实现。

npm install vue-slide-up-down
<template>
  <div>
    <button @click="isExpanded = !isExpanded">Toggle</button>
    <slide-up-down v-model="isExpanded" :duration="300">
      Content with vue-slide-up-down
    </slide-up-down>
  </div>
</template>

<script>
import SlideUpDown from 'vue-slide-up-down'
export default {
  components: { SlideUpDown },
  data() {
    return {
      isExpanded: false
    }
  }
}
</script>

每种方法都有其适用场景,可以根据项目需求选择最合适的实现方式。简单的展开动画使用 Vue Transition 组件即可,复杂动画可以考虑第三方库或插件。

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

相关文章

vue实现级联

vue实现级联

Vue 实现级联选择器的方法 级联选择器(Cascader)是常见的表单组件,用于处理多层级联动数据选择(如省市区选择)。以下是几种实现方式: 基于 Element UI 的 el-cascader…

vue实现类别

vue实现类别

Vue 实现类别的几种方法 在 Vue 中实现类别功能可以通过多种方式完成,以下是一些常见的方法: 使用 v-bind:class 动态绑定类名 通过对象语法或数组语法动态绑定类名,根据条件添加或移…

vue 菜单实现

vue 菜单实现

Vue 菜单实现方法 在Vue中实现菜单功能可以通过多种方式完成,以下是几种常见的实现方法: 使用v-for动态生成菜单 通过数据驱动的方式动态渲染菜单项,适合菜单内容可能变化的场景: <t…

vue 实现报价

vue 实现报价

Vue 实现报价功能 在 Vue 中实现报价功能通常涉及前端表单交互、数据计算和与后端 API 的通信。以下是实现报价功能的几种常见方法: 表单设计与数据绑定 使用 Vue 的 v-model 指…

vue 实现赋值

vue 实现赋值

Vue 实现赋值的方法 在 Vue 中,赋值操作通常涉及数据绑定和响应式更新。以下是几种常见的赋值方式: 直接赋值给 data 属性 在 Vue 实例的 data 对象中定义的属性可以直接通过 th…

vue 实现折叠

vue 实现折叠

Vue 实现折叠功能的方法 在 Vue 中实现折叠功能可以通过多种方式完成,以下是几种常见的实现方法: 使用 v-if 或 v-show 控制显示隐藏 通过绑定一个布尔值变量,结合 v-if 或 v…