5分鐘學會Vue動畫效果

Lawiet發表於2018-07-11

1.哪些元素/那些元件適合在那些條件下實現動畫效果

  • 條件渲染 (使用 v-if)
  • 條件展示 (使用 v-show)
  • 動態元件
  • 元件根節點

過渡類名

簡單例子:(文字隱藏到顯示效果)

<div>
  <button @click="show = !show">show toggle</button>
  <transition name="fade">                              //fade 自定義名稱
    <p v-if="show">hello</p>
  </transition>
</div>

<style>
.fade-enter-active, .fade-leave-active{                 //指就是html中fade名稱
  transition: opacity .5s;                              0.5s動畫過渡的時間
}
.fade-enter, .fade-leave-to {           
  opacity: 0;
}
</style>
複製程式碼

線上執行

過渡類名引數

  • v-enter:定義進入過渡的開始狀態。在元素被插入之前生效,在元素被插入之後的下一幀移除。

  • v-enter-active:定義進入過渡生效時的狀態。在整個進入過渡的階段中應用,在元素被插入之前生效,在過渡/動畫完成之後移除。這個類可以被用來定義進入過渡的過程時間,延遲和曲線函式。

  • v-enter-to: 2.1.8版及以上 定義進入過渡的結束狀態。在元素被插入之後下一幀生效 (與此同時 v-enter 被移除),在過渡/動畫完成之後移除。

  • v-leave: 定義離開過渡的開始狀態。在離開過渡被觸發時立刻生效,下一幀被移除。

  • v-leave-active:定義離開過渡生效時的狀態。在整個離開過渡的階段中應用,在離開過渡被觸發時立刻生效,在過渡/動畫完成之後移除。這個類可以被用來定義離開過渡的過程時間,延遲和曲線函式。

  • v-leave-to: 2.1.8版及以上 定義離開過渡的結束狀態。在離開過渡被觸發之後下一幀生效 (與此同時 v-leave 被刪除),在過渡/動畫完成之後移除。

自己畫了一個過渡動畫生命週期,表示:動畫開始,過程,結束,類名生效和失效

image.png

隱藏到顯示,顯示到隱藏過程

image.png

css動畫

<div>
  <button @click="show = !show">show toggle</button>
  <transition name="fade">  //fade 自定義名稱
    <p v-if="show">hello</p>
  </transition>
</div>

<style>
.fade-enter-active {        //類名:隱藏到顯示過程所需要的時間
  animation: bounce-in .5s;
}
.fade-leave-active {        //類名:顯示到隱藏過程所需要的時間
  animation: bounce-in .5s reverse;     //reverse表示和隱藏到顯示動畫相反
}
@keyframes bounce-in {
  0% {
    transform: scale(0);
  }
  50% {
    transform: scale(1.5);
  }
  100% {
    transform: scale(1);
  }
}
</style>
複製程式碼

線上執行

自定義過渡的類名

引入第三方css庫Animate.css

學到這裡,我們其實也可以可以引用第三方庫來實現這效果,Animate.css

// 在index.html檔案下引入Animate.css
<link href="https://cdn.jsdelivr.net/npm/animate.css@3.5.1" rel="stylesheet" type="text/css">
// 在元件內
<div>
  <button @click="show = !show">show toggle</button>
  <transition  
    enter-active-class="animated tada"
    leave-active-class="animated bounceOutRight" >
    <p v-if="show">hello</p>
  </transition>
</div>
複製程式碼

線上執行

接觸過css動畫,可能會想到一個問題,如果過渡和css動畫時間不一致,那麼應該要以那個時間為標準

所以就引入下面這個問題 你就需要使用 type 特性並設定 animation 或 transition 來明確宣告你需要 Vue 監聽的型別。

也可以設定成顯性的過渡持續時間

<transition :duration="{ enter: 500, leave: 800 }">...</transition>     //以毫秒計算
複製程式碼

這個方法使用情況,Vue 可以自動得出過渡效果的完成時機。預設情況下,Vue 會等待其在過渡效果的根元素的第一個 transitionend 或 animationend 事件。然而也可以不這樣設定——比如,我們可以擁有一個精心編排的一系列過渡效果,其中一些巢狀的內部元素相比於過渡效果的根元素有延遲的或更長的過渡效果。

參考資料

Vuejs官方文件

相關文章