WEBOPIXEL

Vue.jsのトランジションアニメーション[基礎編]

Posted: 2018.06.12 / Category: javascript / Tag: 

Vue.jsでトランジションアニメーションしたいときはtransitionタグを使えば簡単にアニメーションできるのでご紹介いたします。

Sponsored Link

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の説明図
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-というプレフィックスが付与されますが、複数設置したいときはクラス名を区別したい時があります。
そのときはtransitionname属性を設定することで変更することができます。

例えば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;
}

初期描画時のトランジション

今まではボタンクリックイベントでのトランジションの切り替えを行なっていましたが、初期描画時にトランジションで表示することもできます。
その場合はtransitionappear属性を指定します。

<transition appear>
	<div v-show="show" class="box">BOX</div>
</transition>

初期時のshowの値はtrueに変更しましょう。

new Vue({
	el: '#app',
	data: {
		show: true
	}
});