vue组件实现动画
Vue 组件实现动画的方法
使用 Vue 内置的 Transition 组件
Vue 提供了 <transition> 和 <transition-group> 组件,用于处理进入/离开和列表动画。通过添加 CSS 过渡类名(如 v-enter、v-leave-to)或 JavaScript 钩子(如 beforeEnter、enter)实现动画效果。
<transition name="fade">
<div v-if="show">内容</div>
</transition>
.fade-enter-active, .fade-leave-active {
transition: opacity 0.5s;
}
.fade-enter, .fade-leave-to {
opacity: 0;
}
使用 CSS 动画库
结合第三方 CSS 动画库(如 Animate.css)快速实现动画效果。通过 <transition> 的 enter-active-class 和 leave-active-class 属性指定动画类名。

<transition
enter-active-class="animate__animated animate__bounceIn"
leave-active-class="animate__animated animate__bounceOut"
>
<div v-if="show">内容</div>
</transition>
使用 JavaScript 动画库
通过 Vue 的 JavaScript 动画钩子与 GSAP、anime.js 等库结合,实现更复杂的动画逻辑。
<transition
@before-enter="beforeEnter"
@enter="enter"
@leave="leave"
>
<div v-if="show">内容</div>
</transition>
<script>
import gsap from 'gsap';
export default {
methods: {
beforeEnter(el) {
gsap.set(el, { opacity: 0 });
},
enter(el, done) {
gsap.to(el, { opacity: 1, duration: 1, onComplete: done });
},
leave(el, done) {
gsap.to(el, { opacity: 0, duration: 1, onComplete: done });
}
}
};
</script>
列表动画与 TransitionGroup
使用 <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 的响应式数据实现状态变化触发的动画。
<div :class="{ 'active': isActive }">内容</div>
.active {
transition: transform 0.3s;
transform: scale(1.1);
}
路由过渡动画
在 Vue Router 中使用 <transition> 包裹 <router-view>,实现路由切换时的页面过渡效果。
<transition name="slide" mode="out-in">
<router-view></router-view>
</transition>
.slide-enter-active, .slide-leave-active {
transition: transform 0.5s;
}
.slide-enter {
transform: translateX(100%);
}
.slide-leave-to {
transform: translateX(-100%);
}






