こういった要望に答えます。
筆者は、最近、仕事でVue.jsを使ってシングルページアプリケーションを構築したので、信頼していただける記事かなと思います。
この記事はVue CLIを使った開発環境構築方法で作ったVueアプリケーションの雛形を元に解説していますので、まずは雛形を作成してから読み進めていただくと分かりやすいと思います。
App.vueを編集する
早速、トランジションアニメーションを実装していきましょう。
画面確認用にローカルサーバを立ち上げておきましょう。
1 | npm run serve |
まずは、App.vueを編集します。
Vue CLIで作成したディレクトリにあるApp.vueを開いて、route-view要素をtransition要素で囲みます。シングルページアプリケーションではroute-view要素の中にページ情報が読み込まれます。
1 2 3 4 5 6 7 8 9 10 11 | <template> <div id="app"> <div id="nav"> <router-link to="/">Home</router-link> | <router-link to="/about">About</router-link> </div> <transition> <!-- 追加 --> <router-view/> </transition> <!-- 追加 --> </div> </template> |
transition要素を追加したら保存します。この段階では、ブラウザで確認してもトランジションアニメーションは発生しません。
CSSを編集する
次に、App.vueのstyleタグ内にトランジションアニメーションの動作の設定を追加していきます。cssに設定を追加することでページ遷移時にアニメーションさせることができます。
1 2 3 4 5 6 | .v-enter-active, .v-leave-active { transition: opacity .5s; } .v-enter, .v-leave-to { opacity: 0; } |
ブラウザ上で動作を確認してみましょう。ページ遷移時にアニメーションを確認できると思います。
しかし、まだ、フェードアウトが終わる前に、フェードインの画像が表示されてしまっているところに違和感がありますので、これを解決していきましょう。
App.vueのtemplate要素内に先ほど追加した、transition要素にmode属性を追加します。mode属性の値は「out-in」です。
1 2 3 | <transition mode=”out-in”> <!-- 「mode="out-in"」を追加する --> <router-view /> </transition> |
これでよりスムーズなアニメーションになります。まとめると、ページ遷移時にトランジションアニメーションをつ追加する方法は以下の手順になります。
- rourter-view要素をtransition要素で囲む
- transition要素に「mode=”out-in”」属性を追加する
- CSSでアニメーションの指定をする。※CSSの設定を変更することで自由にアニメーションを設定することができる
様々なトランジションアニメーションの紹介
トランジションアニメーションをいくつかご紹介します。ここで紹介するものをアプリケーションに合わせてアレンジしてみるといいと思います。css設定を以下に紹介するものに書き換えることでアニメーションが変化します。
画面右へフェードアウトして、画面左からフェードインするアニメーション
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | .v-enter { transform: translate(-100px, 0); opacity: 0; } .v-enter-to { opacity: 1; } .v-enter-active { transition: all 1s 0s ease; } .v-leave { transform: translate(0, 0); opacity: 1; } .v-leave-to { transform: translate(100px, 0); opacity: 0; } .v-leave-active { transition: all .5s 0s ease; } |
画面上へフェードアウトして、画面下からフェードインするアニメーション
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | .v-enter { transform: translate(-100px, 0); opacity: 0; } .v-enter-to { opacity: 1; } .v-enter-active { transition: all 1s 0s ease; } .v-leave { transform: translate(0, 0); opacity: 1; } .v-leave-to { transform: translate(100px, 0); opacity: 0; } .v-leave-active { transition: all .5s 0s ease; } |
画面左にフェードアウトして、画面左からフェードインするアニメーション
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | .v-enter { transform: translate(-100px, 0); opacity: 0; } .v-enter-to { opacity: 1; } .v-enter-active { transition: all 1s 0s ease; } .v-leave { transform: translate(0, 0); opacity: 1; } .v-leave-to { transform: translate(-100px, 0); opacity: 0; } .v-leave-active { transition: all .5s 0s ease; } |
以上、ページ遷移時にアニメーションをつける方法をご紹介しました。