1. 程式人生 > >Vue中的動畫特效

Vue中的動畫特效

Vue 在插入、更新或者移除 DOM 時,提供多種不同方式的應用過渡效果。 包括以下工具:

  • 在 CSS 過渡和動畫中自動應用 class
  • 可以配合使用第三方 CSS 動畫庫,如 Animate.css
  • 在過渡鉤子函式中使用 JavaScript 直接操作 DOM
  • 可以配合使用第三方 JavaScript 動畫庫,如 Velocity.js

Vue 提供了 transition 的封裝元件,在下列情形中,可以給任何元素和元件新增進入/離開過渡

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

過渡的類名

在進入/離開的過渡中,會有 6 個 class 切換。

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

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

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

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

  5. v-leave-active

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

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

我們可以通過以下特性來自定義過渡類名:

  • enter-class
  • enter-active-class
  • enter-to-class (2.1.8+)
  • leave-class
  • leave-active-class
  • leave-to-class
     (2.1.8+)
<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <title>Vue 動畫</title>
    <script src="./vue.js"></script>
    <link href="https://cdn.jsdelivr.net/npm/[email protected]" rel="stylesheet" type="text/css">

    <style>
        .fade-enter,
        .fade-leave-to {
            opacity: 0;
        }
        
        .fade-enter-active,
        .fade-leave-active {
            transition: opacity 1s;
        }
    </style>
</head>

<body>

    <div id="root">
        <transition :duration="{enter: 5000,leave:10000}" name="fade" appear enter-active-class="animated fadeIn fade-enter-active" leave-active-class="animated fadeOut fade-leave-active" appear-active-class="animated fadeIn ">
            <div v-show="show">Hello World</div>
        </transition>
        <button @click="handleClick">toggle</button>
    </div>

    <script>
        var app = new Vue({
            el: " #root ",
            data: {
                show: true

            },
            methods: {
                handleClick: function() {
                    this.show = !this.show;
                }
            }
        })
    </script>
</body>

</html>

1.appear :解決首次進入沒有動畫的效果

2.duration="{enter: 5000,leave:10000}" 解決兩種動畫效果的不確定時間。