Vue.jsのtransitionを使ってみる

要素の表示・非表示や更新した際にアニメーション効果を追加できる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');
    }
  }
});

JavaScriptフックのデモページ

それぞれ以下のタイミングで実行されます。

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;
}

これで初期描画時にフェードで表示されるようになりました。
初期描画時のアニメーションのデモページ

参考サイト

このエントリーをはてなブックマークに追加

関連記事

コメントを残す

メールアドレスが公開されることはありません。
* が付いている欄は必須項目です

CAPTCHA


コメントが承認されるまで時間がかかります。

2021年10月
 12
3456789
10111213141516
17181920212223
24252627282930
31