点击实现vue动画
在Vue中实现动画效果可以通过内置的<transition>和<transition-group>组件结合CSS或JavaScript钩子完成。以下是具体方法:
使用CSS过渡动画
定义CSS类名控制过渡效果,Vue会自动在元素插入/移除时添加对应的类名:
<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动画
通过@keyframes定义动画效果:
.bounce-enter-active {
animation: bounce-in 0.5s;
}
.bounce-leave-active {
animation: bounce-in 0.5s reverse;
}
@keyframes bounce-in {
0% { transform: scale(0) }
50% { transform: scale(1.5) }
100% { transform: scale(1) }
}
使用JavaScript钩子
通过事件钩子实现更复杂的动画逻辑:
<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) {
anime({
targets: el,
opacity: 1,
duration: 1000,
complete: done
})
},
leave(el, done) {
anime({
targets: el,
opacity: 0,
duration: 1000,
complete: done
})
}
}
列表动画
使用<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);
}
第三方动画库集成
与Animate.css等库配合使用:
<transition
enter-active-class="animate__animated animate__bounceIn"
leave-active-class="animate__animated animate__bounceOut"
>
<div v-if="show">内容</div>
</transition>
以上方法可根据具体需求选择使用,CSS方案适合简单过渡效果,JavaScript方案适合复杂动画控制,第三方库能快速实现预制动画效果。







