同时生效的进入和离开的过渡不能满足所有要求,所以 Vue 提供了 过渡模式
in-out
:新元素先进行过渡,完成之后当前元素过渡离开。
out-in
:当前元素先进行过渡,完成之后新元素过渡进入。
<div id="app"> <transition name="fade" mode="out-in"> <button v-if="!flag" @click="flag=!flag" :key="'off'">off</button> <button v-if="flag" @click="flag=!flag" :key="'on'">on</button> </transition> </div>
new Vue({ el:"#app", data:{flag:true} })
@keyframes fadeIn{ 0%{ opacity: 0;} 100%{opacity: 1;} } @keyframes fadeOut{ from{ opacity: 1;} to{opacity: 0;} } .fade-enter-active{ animation: fadeIn .7s ease; } .fade-leave-active{ animation: fadeOut .2s ease; }