vue2.0动画实现
Vue 2.0 动画实现方法
Vue 2.0 提供了多种方式实现动画效果,主要通过内置的 <transition> 和 <transition-group> 组件以及 CSS/JavaScript 钩子实现。
使用 <transition> 组件
通过包裹需要动画的元素,Vue 会在元素的插入、更新或移除时自动应用过渡效果。需配合 CSS 类名或 JavaScript 钩子使用。
<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;
}
使用 <transition-group> 组件
适用于列表动画,需为每个子元素设置唯一的 key。

<transition-group name="list" tag="ul">
<li v-for="item in items" :key="item.id">{{ item.text }}</li>
</transition-group>
对应的 CSS:
.list-enter-active, .list-leave-active {
transition: all 1s;
}
.list-enter, .list-leave-to {
opacity: 0;
transform: translateY(30px);
}
JavaScript 钩子
通过事件钩子实现更复杂的动画逻辑,例如结合第三方动画库(如 GSAP)。
<transition
@before-enter="beforeEnter"
@enter="enter"
@leave="leave"
>
<div v-if="show">内容</div>
</transition>
对应的 JavaScript 方法:

methods: {
beforeEnter(el) {
el.style.opacity = 0;
},
enter(el, done) {
gsap.to(el, {
opacity: 1,
duration: 0.5,
onComplete: done
});
},
leave(el, done) {
gsap.to(el, {
opacity: 0,
duration: 0.5,
onComplete: done
});
}
}
动态动画名称
通过绑定 name 属性实现动态切换动画效果。
<transition :name="animationType">
<div v-if="show">内容</div>
</transition>
初始渲染动画
使用 appear 属性让元素在初次渲染时也触发动画。
<transition appear appear-class="custom-appear-class">
<div>内容</div>
</transition>
第三方动画库集成
例如与 Animate.css 结合:
<transition
enter-active-class="animate__animated animate__bounceIn"
leave-active-class="animate__animated animate__bounceOut"
>
<div v-if="show">内容</div>
</transition>
注意事项
- 确保动画元素有明确的
v-if或v-show控制显示状态。 - 列表动画中每个子元素需有唯一的
key。 - 使用 JavaScript 钩子时,需要在动画完成后调用
done回调函数。 - 性能优化:避免过度使用复杂动画,尤其是影响布局的属性(如
margin、height)。






