vue的动画实现
Vue 动画实现方法
Vue 提供了多种方式实现动画效果,主要通过内置组件和第三方库支持。以下是常见实现方法:
使用 <transition> 组件
Vue 内置的 <transition> 组件可以在元素插入、更新或移除时添加动画效果:
<transition name="fade">
<p v-if="show">内容</p>
</transition>
对应 CSS 样式:
.fade-enter-active, .fade-leave-active {
transition: opacity 0.5s;
}
.fade-enter, .fade-leave-to {
opacity: 0;
}
使用 <transition-group> 列表动画
针对列表渲染的动画效果:

<transition-group name="list" tag="ul">
<li v-for="item in items" :key="item.id">{{ item.text }}</li>
</transition-group>
JavaScript 钩子动画
通过 JavaScript 实现更复杂的动画逻辑:
<transition
@before-enter="beforeEnter"
@enter="enter"
@leave="leave"
>
<div v-if="show">内容</div>
</transition>
methods: {
beforeEnter(el) {
el.style.opacity = 0
},
enter(el, done) {
anime({
targets: el,
opacity: 1,
duration: 1000,
complete: done
})
}
}
使用 Animate.css 库
集成第三方 CSS 动画库:

<transition
enter-active-class="animate__animated animate__bounceIn"
leave-active-class="animate__animated animate__bounceOut"
>
<p v-if="show">内容</p>
</transition>
使用 GSAP 高级动画
对于复杂动画场景,可以使用 GSAP 库:
methods: {
enter(el, done) {
gsap.from(el, {
duration: 1,
x: 100,
opacity: 0,
onComplete: done
})
}
}
状态驱动的动画
通过数据绑定驱动动画:
<div :style="{ transform: `scale(${scale})` }"></div>
data() {
return {
scale: 1
}
},
methods: {
animate() {
this.scale = this.scale === 1 ? 1.5 : 1
}
}
路由过渡动画
为页面切换添加动画效果:
<router-view v-slot="{ Component }">
<transition name="route" mode="out-in">
<component :is="Component" />
</transition>
</router-view>
每种方法适用于不同场景,从简单的 CSS 过渡到复杂的 JavaScript 动画,Vue 提供了灵活的动画实现方案。






