vue动画笔记

背景
内置的<transition>和<transition-group>组件同时支持CSS和JS钩子
过渡和动画的不同:
过渡就是从一个状态向另一个状态插入值(从起始状态,到结束状态,再回来)
动画不同,可以在一个声明中设置多个状态(比如动画50%的位置设置一个关键帧,
然后在70%的位置,也可以设置延迟属性实现复杂运动)
CSS过渡
假设有一个简单的模态窗。通过点击按钮显示或隐藏模态窗。可以这样做:
创建一个按钮的vue实例,在实例中创建一个子组件,设置数据的状态
这样可以通过切换布尔值并添加事件处理实现子组件的显示及隐藏。
可以使用v-if或者v-show来切换组件的可见性。也可以使用slot放置模态窗的切换状态
过渡部分结构:
<transition name=”fade”>
<app-child v-if=”isShowing” class=”modal”>

<button @click="toggleShow">
  Close
</button>

</app-child>
</transition>
.fade-enter-active, .fade-leave-active {
transition: opacity 0.25s ease-out;
}

.fade-enter, .fade-leave-to {
opacity: 0;
}
CSS动画
所有有趣的动画都是基于enter-active和leave-active
可以给每一个实例一个特殊类
enter-active-class=”toasty”
leave-active-class=”bounceOut”
动画部分结构:
<transition

name="ballmove"
enter-active-class="bouncein"
leave-active-class="rollout">

<div v-if=”isShowing”>

<app-child class="child"></app-child>

</div>
</transition>
对于反弹对画,如果使用CSS的话,需要设置大量关键帧,
@mixin ballb($yaxis: 0) {
transform: translate3d(0, $yaxis, 0);
}

@keyframes bouncein {
1% { @include ballb(-400px); }
20%, 40%, 60%, 80%, 95%, 99%, 100% { @include ballb() }
30% { @include ballb(-80px); }
50% { @include ballb(-40px); }
70% { @include ballb(-30px); }
90% { @include ballb(-15px); }
97% { @include ballb(-10px); }
}

.bouncein {
animation: bouncein 0.8s cubic-bezier(0.25, 0.46, 0.45, 0.94) both;
}

.ballmove-enter {
@include ballb(-400px);
}

@keyframes rollout {
0% { transform: translate3d(0, 300px, 0); }
100% { transform: translate3d(1000px, 300px, 0); }
}

@keyframes ballroll {
0% { transform: rotate(0); }
100% { transform: rotate(1000deg); }
}

.rollout {
width: 60px;
height: 60px;
animation: rollout 2s cubic-bezier(0.55, 0.085, 0.68, 0.53) both;
div {

animation: ballroll 2s cubic-bezier(0.55, 0.085, 0.68, 0.53) both; 

}
}

JS动画
有很多适合动画的易于使用的JS钩子。所有的钩子都会传入el参数,除了动画钩子(enter和leave)
还会传入done作为参数(它的作用就是告知Vue动画结束)
<transition
@before-enter=”beforeEnter”
@enter=”enter”
@after-enter=”afterEnter”
@enter-cancelled=”enterCancelled”

@before-Leave=”beforeLeave”
@leave=”leave”
@after-leave=”afterLeave”
@leave-cancelled=”leaveCancelled”
:css=”false”>

</transition>
从最基本的层面看,这是开始动画和结束动画所需的,包括相关的方法:
<transition
@enter=”enterEl”
@leave=”leaveEl”
:css=”false”>
<!– put element here–>
</transition>
methods: {
enterEl(el, done) {

 //entrance animation
 done();

},
leaveEl(el, done) {

//exit animation
done();

},
}

    原文作者:zs_staria
    原文地址: https://segmentfault.com/a/1190000020004741
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞