vue 实现动画
Vue 动画实现方法
Vue 提供了多种方式实现动画效果,包括内置过渡组件、CSS 动画库结合以及 JavaScript 动画库集成。
使用 Vue 内置过渡组件
Vue 的 <transition> 和 <transition-group> 组件可以为元素添加进入/离开过渡效果。通过定义 CSS 类名或 JavaScript 钩子实现动画。
<transition name="fade">
<div v-if="show">内容</div>
</transition>
.fade-enter-active, .fade-leave-active {
transition: opacity 0.5s;
}
.fade-enter, .fade-leave-to {
opacity: 0;
}
结合 CSS 动画库
可以引入 Animate.css 等 CSS 动画库,通过自定义过渡类名快速应用预定义动画。
<transition
enter-active-class="animate__animated animate__fadeIn"
leave-active-class="animate__animated animate__fadeOut"
>
<div v-if="show">内容</div>
</transition>
使用 JavaScript 动画库
集成 GSAP 或 anime.js 等专业动画库,在 Vue 的生命周期钩子中实现复杂动画。
import gsap from 'gsap'
export default {
methods: {
beforeEnter(el) {
gsap.set(el, { opacity: 0 })
},
enter(el, done) {
gsap.to(el, { opacity: 1, duration: 1, onComplete: done })
}
}
}
列表动画实现
使用 <transition-group> 组件为列表项添加排序动画,需要为每个元素设置唯一 key。
<transition-group name="list" tag="ul">
<li v-for="item in items" :key="item.id">
{{ item.text }}
</li>
</transition-group>
.list-move {
transition: transform 0.5s;
}
状态动画
通过 Vue 的响应式系统和计算属性,实现基于数据变化的动画效果。结合 CSS 变量或 SVG 实现数据可视化动画。
computed: {
circleStyle() {
return {
'stroke-dashoffset': this.calculateOffset(this.progress)
}
}
}
动画性能优化
使用 will-change 属性提前告知浏览器可能的变化,优先使用 transform 和 opacity 属性实现动画以获得更好的性能。避免在动画中触发重排操作,合理使用 requestAnimationFrame。

.animated-element {
will-change: transform, opacity;
}






