vue实现动画效果
Vue 动画实现方法
Vue 提供了多种方式实现动画效果,包括内置组件、CSS 过渡/动画、JavaScript 钩子以及第三方库集成。
使用 Vue 内置过渡组件
Vue 的 <transition> 和 <transition-group> 组件可方便地添加进入/离开过渡:
<transition name="fade">
<div v-if="show">内容</div>
</transition>
对应 CSS 样式:
.fade-enter-active, .fade-leave-active {
transition: opacity 0.5s;
}
.fade-enter, .fade-leave-to {
opacity: 0;
}
CSS 动画实现
直接使用 CSS 的 @keyframes 定义动画:

@keyframes bounce {
0% { transform: scale(1); }
50% { transform: scale(1.2); }
100% { transform: scale(1); }
}
.bounce-enter-active {
animation: bounce 0.5s;
}
JavaScript 钩子动画
通过 JavaScript 实现更复杂的动画逻辑:
<transition
@before-enter="beforeEnter"
@enter="enter"
@leave="leave"
>
<div v-if="show">内容</div>
</transition>
methods: {
beforeEnter(el) {
el.style.opacity = 0;
el.style.transform = 'translateY(30px)';
},
enter(el, done) {
anime({
targets: el,
opacity: 1,
translateY: 0,
duration: 500,
complete: done
});
}
}
列表过渡
使用 <transition-group> 处理动态列表:
<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);
}
第三方动画库集成
结合 GSAP 或 Anime.js 等专业动画库:

import gsap from 'gsap';
export default {
methods: {
enter(el, done) {
gsap.from(el, {
duration: 0.5,
opacity: 0,
y: 30,
onComplete: done
});
}
}
}
状态驱动动画
使用 Vue 的响应式数据驱动动画:
<div :style="{ transform: `scale(${scale})` }"></div>
data() {
return {
scale: 1
}
},
methods: {
animate() {
this.scale = 1.2;
setTimeout(() => this.scale = 1, 500);
}
}
路由过渡效果
为 Vue Router 添加页面过渡:
<router-view v-slot="{ Component }">
<transition name="fade" mode="out-in">
<component :is="Component" />
</transition>
</router-view>
性能优化建议
避免使用会触发重排的属性如 width、height,优先使用 transform 和 opacity。对于复杂动画考虑使用 will-change 属性提示浏览器优化:
.animated-element {
will-change: transform, opacity;
}






