5分鐘學會Vue動畫效果

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>
複製代碼

在線運行css

過渡類名參數

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

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

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

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

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

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

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

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>
複製代碼

在線運行ide

自定義過渡的類名

引入第三方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官方文檔

相關文章
相關標籤/搜索