要素の表示・非表示や更新した際にアニメーション効果を追加できるVue.jsのtransitionを使ってみます。
サンプルコード
アニメーションさせたい要素をtransitionラッパーコンポーネントで囲います。
アニメーションの対象となるのはv-ifやv-showの利用時、動的コンポーネントの場合など条件があるので注意ください。
<div id="app"> <button v-on:click="show = !show">Toggle</button> <transition name="fade"> <p v-if="show">SHOW</p> </transition> </div>
v-ifでの切り替え用にdataを用意します。
var app = new Vue({ el: '#app', data: { show: true } });
CSSでアニメーションの設定を行います。
/* フェードイン・フェードアウト中の設定 */ .fade-enter-active, .fade-leave-active { transition: opacity .5s; } /* フェードイン開始時・フェードアウト終了時の設定 */ .fade-enter, .fade-leave-to { opacity: 0; }
これで要素の表示・非表示時にフェードのアニメーションが行われるようになりました。
transitionのデモページ
アニメーション設定のために、各タイミングで以下のclassがアニメーション要素に適用されます。
v-enter | 要素挿入時のアニメーションの開始時の値を設定するために使用する。 アニメーション開始前に適用され、アニメーション開始のタイミングで削除される。 |
---|---|
v-enter-active | アニメーション中の設定に使用する。 要素が挿入される前に適用され、アニメーション終了のタイミングで削除される。 |
v-enter-to | 要素挿入時のアニメーションの終了時の値を設定するために使用する。 アニメーション開始のタイミングで追加され、アニメーション終了のタイミングで削除される。 |
v-leave | 要素削除時のアニメーションの開始時の値を設定するために使用する。 アニメーション開始前に適用され、アニメーション開始のタイミングで削除される。 |
v-leave-active | アニメーション中の設定に使用する。 アニメーション開始前に適用され、アニメーション終了のタイミングで削除される。 |
v-leave-to | 要素削除時のアニメーションの終了時の値を設定するために使用する。 アニメーション開始のタイミングで追加され、アニメーション終了のタイミングで削除される。 |
transition要素に特に設定がない場合は上記のclass名になりますが、前述のデモのようにname=”fade”が設定されている場合は「v-」が「fade-」に変わります。
アニメーションの途中でJavaScriptの処理などを行えるように、フックの設定ができます。
各イベントはv-onで設定できます。
<div id="app"> <button v-on:click="show = !show">Toggle</button> <transition name="fade" v-on:before-enter="beforeEnter" v-on:enter="enter" v-on:after-enter="afterEnter" v-on:enter-cancelled="enterCancelled" v-on:before-leave="beforeLeave" v-on:leave="leave" v-on:after-leave="afterLeave" v-on:leave-cancelled="leaveCancelled" > <p v-if="show">SHOW</p> </transition> </div>
methodsで各処理内容を設定します。
var app = new Vue({ el: '#app', data: { show: true }, methods: { beforeEnter: function (el) { console.log('beforeEnter'); }, enter: function (el, done) { console.log('enter'); }, afterEnter: function (el) { console.log('afterEnter'); }, enterCancelled: function (el) { console.log('enterCancelled'); }, beforeLeave: function (el) { console.log('beforeLeave'); }, leave: function (el, done) { console.log('leave'); }, afterLeave: function (el) { console.log('afterLeave'); }, leaveCancelled: function (el) { console.log('leaveCancelled'); } } });
それぞれ以下のタイミングで実行されます。
before-enter | 要素挿入前に実行。 |
---|---|
enter | 要素挿入時のアニメーション開始前に実行。 |
after-enter | 要素挿入時のアニメーション終了後に実行。 |
enter-cancelled | 要素挿入キャンセル時に実行。 |
before-leave | 要素削除前に実行。 |
leave | 要素削除時のアニメーション開始前に実行。 |
after-leave | 要素削除時のアニメーション終了後に実行。 |
leave-cancelled | 要素削除キャンセル時に実行。 |
JavaScriptフックは他のアニメーションライブラリ・プラグインなどと組み合わせて使うことができます。
初期描画時のアニメーションの設定もできます。
appear属性を追加します。
<div id="app"> <button v-on:click="show = !show">Toggle</button> <transition name="fade" appear appear-class="custom-appear-class" appear-active-class="custom-appear-active-class" appear-to-class="custom-appear-to-class" > <p v-if="show">SHOW</p> </transition> </div>
appear-classでアニメーション開始時前のclass、appear-active-classでアニメーション中のclass、appear-to-classでアニメーション終了時のclassを指定できます。
上記で設定したclassにアニメーションのスタイルを設定します。
/* アニメーション開始時 */ .custom-appear-class { opacity: 0; } /* アニメーション中 */ .custom-appear-active-class { transition: opacity 1s; } /* アニメーション終了時 */ .custom-appear-to-class { opacity: 1; }
これで初期描画時にフェードで表示されるようになりました。
初期描画時のアニメーションのデモページ
コメントが承認されるまで時間がかかります。