vue 2.5.16 を使用します。
ボタンクリックで表示の切り替え
最初にアニメーションを使わない単純な例で、ボタンをクリックして要素の表示の切り替えを作成してみます。
<div id="app"> <button v-on:click="show = !show">表示切り替え</button> <div v-show="show">BOX</div> </div> <script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script> <script> new Vue({ el: '#app', data: { show: false } }); </script>
フェードイン・フェードアウトアニメーション
アニメーションさせたい要素をtransition
タグで囲みます。
<transition> <div v-show="show" class="box">BOX</div> </transition>
transition
で囲まれた要素は表示/非表示にクラスが付与されるようになります。
このクラスにCSSでスタイルを定義することがアニメーションをつけることになります。
状態に応じて下記のクラスが付与されます。
v-enter | enterの開始状態 |
---|---|
v-enter-active | enterのアクティブ状態 |
v-enter-to | enterの終了状態 |
v-leave | leaveの開始状態 |
v-leave-active | leaveのアクティブ状 |
v-leave-to | leaveの終了状態 |
公式サイトにある図を見るとわかりやすいかと思います。
Enter/Leave とトランジション一覧 — Vue.js
ざっくり分けると、表示時はenter
で、非表示時はleave
系のクラスが付与されます。
これを理解したうえでフェードイン・フェードアウトのスタイルを作成してみましょう。
/* アニメーション中のスタイル */ .v-leave-active, .v-enter-active { transition: opacity 1s; } /* 表示アニメーション */ .v-enter { opacity: 0; } .v-enter-to { opacity: 1; } /* 非表示アニメーション */ .v-leave { opacity: 1; } .v-leave-to { opacity: 0; }
opacity: 1
はデフォルトの値なので省略して、下記サンプルのようにもできます。
トランジションのクラス名を変更する
transition
の初期クラスはv-
というプレフィックスが付与されますが、複数設置したいときはクラス名を区別したい時があります。
そのときはtransition
にname
属性を設定することで変更することができます。
例えばname
属性をbasic
とした場合、クラス名はv-
をbasic-
に置き換えます。
<transition name="basic"> <div v-show="show" class="box">BOX</div> </transition>
.basic-enter { opacity: 0; } .basic-enter-to { opacity: 1; }
初期描画時のトランジション
今まではボタンクリックイベントでのトランジションの切り替えを行なっていましたが、初期描画時にトランジションで表示することもできます。
その場合はtransition
にappear
属性を指定します。
<transition appear> <div v-show="show" class="box">BOX</div> </transition>
初期時のshow
の値はtrue
に変更しましょう。
new Vue({ el: '#app', data: { show: true } });