vue實現動畫效果大全
阿新 • • 發佈:2022-03-02
vue要實現動畫很簡單,同時他提供了很多種實現方式,為了快速入門,這裡只講一種最簡單實用的方法,就是結合animate.css
這個css動畫庫。
https://animate.style
準備工作
安裝animate.css
npm install animate.css --save
在main.ts中匯入animate.css
import 'animate.css/animate.min.css'
transition
vue封裝了動畫元件,我們可以直接使用,只需要用"<transition>"包裹要新增動畫的元素(或元件)
, 這裡我們要注意的就是觸發條件:
-
被包裹元件(或元素)上的v-if的值發生變化 -
被包裹元件(或元素)上的v-show的值發生變化 -
動態元件的is值發生變化的時候也會觸發動畫,動態元件在業務程式碼中不常見,這裡暫時不講,記住這個名詞即可
App.vue
<template> <div> <button @click="isShow = !isShow">切換</button> <transition :duration="1000" enter-active-class="animate__animated animate__fadeInDown" leave-active-class="animate__animated animate__fadeOutUp" > <p v-if="isShow">hello</p> </transition> </div> </template> <script> import "animate.css"; import { defineComponent } from "vue"; export default defineComponent({ data() { return { isShow: true, }; }, }); </script>
效果
這裡的animate__animated
代表當前元素使用animate.css
的動畫,這個樣式是animate.css自帶的,後面的animate__fadeInDown
是具體的動畫名稱。
更多的動畫樣式名可檢視:https://animate.style/
enter-active-class
元件(或元素)的"v-if/v-show"值從"false"變成"true"後,vue會自動給元素增加"enter-active-class"中的樣式名,動畫執行完畢vue會自動刪除元素上新增的"動畫樣式"。
leave-active-class
與"enter-active-class",在"v-if/v-show"值從"true"變成"false"後,執行類似操作。
duration
通過duration我們可以指定動畫的執行時間。
mode
當"<transition>
"下有2個內容的時候,需要控制下動畫觸發時機,不然可能會出現"重疊"等意外。
<template>
<transition
:duration="1000"
enter-active-class="animate__animated animate__fadeInDown"
leave-active-class="animate__animated animate__fadeOutUp"
>
<p v-if="isShow">hello</p>
<p v-else>你好</p>
</transition>
</template>
效果
2段文字再點選切換後同時動畫,這肯定不是我們要的,mode可以控制2個元素的動畫出現順序。
mode=out-in
讓消失動畫先執行,再執行顯示動畫。
反之還有"in-out",本例顯示是要使用"out-in":
<template>
<transition
+ mode="out-in"
:duration="1000"
enter-active-class="animate__animated animate__fadeInDown"
leave-active-class="animate__animated animate__fadeOutUp"
>
<p v-if="isShow">hello</p>
<p v-else>你好</p>
</transition>
</template>
效果