vue实现的动画
Vue 动画实现方式
Vue 提供了多种方式实现动画效果,包括内置的过渡系统、第三方动画库集成以及直接操作 CSS 或 JavaScript 动画。
使用 Vue 内置过渡
Vue 的 <transition> 和 <transition-group> 组件可以方便地添加进入/离开过渡效果。通过定义 CSS 类名或 JavaScript 钩子实现动画。
<transition name="fade">
<p v-if="show">This will fade in/out</p>
</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__bounceIn"
leave-active-class="animate__animated animate__bounceOut"
>
<p v-if="show">Bouncing text</p>
</transition>
使用 JavaScript 动画库
集成 GSAP 或 Anime.js 等 JavaScript 动画库可以实现更复杂的动画效果。
import gsap from 'gsap'
export default {
methods: {
beforeEnter(el) {
gsap.set(el, {
scaleX: 0.25,
scaleY: 0.25,
opacity: 0
})
},
enter(el, done) {
gsap.to(el, {
duration: 1,
scaleX: 1,
scaleY: 1,
opacity: 1,
ease: 'elastic.inOut(2.5, 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-enter-active, .list-leave-active {
transition: all 1s;
}
.list-enter, .list-leave-to {
opacity: 0;
transform: translateY(30px);
}
状态动画
通过 Vue 的响应式系统和计算属性,可以实现基于状态变化的动画。
export default {
data() {
return {
animatedNumber: 0,
targetNumber: 100
}
},
watch: {
targetNumber(newValue) {
gsap.to(this, {
duration: 0.5,
animatedNumber: newValue
})
}
}
}
路由过渡
为 Vue Router 的视图切换添加过渡效果。

<transition name="fade" mode="out-in">
<router-view></router-view>
</transition>
Vue 的动画系统灵活且强大,可以根据项目需求选择合适的方式实现从简单到复杂的各种动画效果。






