Vueでアニメーションを実現するには、ページ内のアニメ―ションをつけたい要素を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 opacity: 0; ==========> opacity: 1; | | v-enter v-enter-to |___________________________________| | v-enter-active ============================================ Leave opacity: 1; ==========> opacity: 0; | | v-leave v-leave-to |___________________________________| | v-leave-active
以下にモーダルウィンドウを実装したときにサンプルコードを残しておきます。 ところどころ略されているところは目をつむっていただき、イメージをつかんでいただけたらなと思います。
name="modal"とすることで、アニメーションの名前を決定しています。 また、tag="div"の部分で、<transition>タグを何として扱うかを決定しています。
<template> <transition apper name="modal" tag="div"> <div class="modal-overlay" @click.self="closeModal"> <div class="message-box"> <header class="message-box-header"> </header> <section class="message-box-body"> </section> <footer class="message-box-footer"> </footer> </div> </div> </transition> </template>
.modal-enter-active, .modal-leave-active { transition: opacity 1.39s; .message-box { transition: opacity .39s, transform .6s } } .modal-enter, .modal-leave-to { opacity: 0; .message-box { opacity: 0; transform: translateY(-39px); } }
蛇足ですが、フェードインのアニメーションも記述しておきます。 今回取り上げたのは1つのプロパティに対するアニメーションでしたが、複数のプロパティに対してアニメーションを当てると面白いデザインのものができるので、調べてみると良いかもしれません。
.fade-in-enter-active, .fade-in-leave-active { transition: all 2s ease; opacity: 1; } .fade-in-enter, .fade-in-leave-to { opacity: 0; }