1. 程式人生 > 其它 >vue實現動畫效果大全

vue實現動畫效果大全

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>"包裹要新增動畫的元素(或元件), 這裡我們要注意的就是觸發條件:

  1. 被包裹元件(或元素)上的v-if的值發生變化
  2. 被包裹元件(或元素)上的v-show的值發生變化
  3. 動態元件的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>

效果