vue中实现动画
Vue 动画实现方法
Vue 提供了多种方式实现动画效果,包括内置组件、CSS 过渡/动画以及第三方库集成。
使用 <transition> 组件
Vue 内置的 <transition> 组件可以轻松实现元素进入/离开的过渡效果。需要在元素周围包裹该组件,并定义相应的 CSS 类名。
<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 定义动画,通过 Vue 控制动画的触发时机。
@keyframes bounce {
0% { transform: scale(1); }
50% { transform: scale(1.5); }
100% { transform: scale(1); }
}
.bounce {
animation: bounce 1s;
}
在模板中动态添加类名:
<div :class="{ 'bounce': shouldBounce }">弹跳效果</div>
使用 <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 1s;
}
.list-enter, .list-leave-to {
opacity: 0;
transform: translateY(30px);
}
使用 JavaScript 钩子
可以通过 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: 1,
onComplete: done
});
},
leave(el, done) {
gsap.to(el, {
opacity: 0,
duration: 1,
onComplete: done
});
}
}
第三方动画库
可以集成第三方动画库如 Animate.css,提供更多预设动画效果。
<transition
enter-active-class="animate__animated animate__bounceIn"
leave-active-class="animate__animated animate__bounceOut"
>
<div v-if="show">内容</div>
</transition>
需要先安装并引入 Animate.css 库:
npm install animate.css
在 main.js 中引入:
import 'animate.css';
状态驱动的动画
使用 Vue 的响应式系统和计算属性,可以创建基于状态变化的动画效果。
computed: {
rotateValue() {
return this.isRotating ? 180 : 0;
}
}
模板中使用:

<div :style="{ transform: `rotate(${rotateValue}deg)` }">
旋转元素
</div>
通过组合这些方法,可以在 Vue 应用中实现丰富多样的动画效果。根据具体需求选择合适的实现方式,从简单的 CSS 过渡到复杂的 JavaScript 动画均可灵活运用。






