vue转场动画怎么实现
Vue 转场动画的实现方法
在 Vue 中实现转场动画可以通过内置的 <transition> 组件或结合 CSS 动画库(如 Animate.css)完成。以下是具体实现方式:
使用 <transition> 组件
Vue 提供了 <transition> 组件,用于在元素插入、更新或移除时添加动画效果。需配合 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;
}
说明:
enter-active和leave-active定义动画持续时间和属性。enter和leave-to定义动画的起始和结束状态。
结合 Animate.css 库
通过 Animate.css 可以快速实现预定义的动画效果。
安装 Animate.css:
npm install animate.css
使用示例:
<transition
enter-active-class="animate__animated animate__fadeIn"
leave-active-class="animate__animated animate__fadeOut"
>
<div v-if="show">内容</div>
</transition>
注意:
- 需引入 Animate.css 样式文件(通常在
main.js中导入)。 animate__animated是基础类,animate__fadeIn等为具体动画效果。
列表过渡(<transition-group>)
对多个元素(如列表)的动画效果,需使用 <transition-group>。
示例:
<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 0.5s;
}
.list-enter, .list-leave-to {
opacity: 0;
transform: translateY(30px);
}
说明:
tag属性指定渲染的根元素。- 每个子元素需设置唯一的
key。
JavaScript 钩子实现复杂动画
通过 JavaScript 钩子(如 beforeEnter、enter 等)可以更灵活地控制动画逻辑。
示例:
<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
});
}
}
说明:
- 需使用动画库(如 GSAP)或原生 JavaScript 实现动画。
done回调用于通知 Vue 动画结束。
动态过渡与模式控制
通过动态绑定属性或切换模式(in-out/out-in)优化动画流程。
动态过渡示例:
<transition :name="animationType">
<div v-if="show">内容</div>
</transition>
模式控制示例:
<transition mode="out-in">
<div v-if="show" key="a">内容A</div>
<div v-else key="b">内容B</div>
</transition>
说明:
mode="out-in"确保当前元素先离开,新元素再进入。- 动态绑定可根据状态切换动画类型。
以上方法可根据实际需求灵活组合使用,实现从简单到复杂的转场动画效果。







