SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

JavaScriptフレームワーク「Vue.js」と「Nuxt.js」の活用

複数のページを切り替える、Nuxt.jsのルーティング機能を学ぼう

JavaScriptフレームワーク「Vue.js」と「Nuxt.js」の活用 第3回


ネストしたルート

 Nuxt.jsでは、あるパス(例えば「/Android」)に対応する親ページに、サブパス(例えば「/Android/Samsung」)に対応する子ページを埋め込んで表示させることができます。このような例を図7のサンプルで説明します。

図7:ネストしたルートのサンプル(p003-nest)
図7:ネストしたルートのサンプル(p003-nest)

 このサンプルでの、pagesフォルダー配下の配置を図8に示します。親ページのファイル(/pages/Android.vue)と同名のフォルダー(/pages/Android)を作成して、その中に子ページのファイル(/pages/Android/_vendor.vue)を配置します。

図8:図7のサンプルでのpagesフォルダー配下の配置(p003-nest)
図8:図7のサンプルでのpagesフォルダー配下の配置(p003-nest)

 親ページのファイル内容はリスト5の通りです。(1)の<nuxt-child>タグ部分に子ページが表示されます。

[リスト5]ネストしたルートの親ページ(p003-nest/pages/Android.vue)
<template>
  <div class="parent">
    <h1>注目Android</h1>
    <p>この秋冬、注目のAndroidスマホを紹介します。</p>
    <div>----↓ここに子ページを表示↓----</div>
      <nuxt-child></nuxt-child><!--(1)-->
    <div>----↑ここに子ページを表示↑----</div>
  </div>
</template>

 このサンプルを実行して「/Android/Samsung」と「/Android/SHARP」のパスに対応したページを表示させると、図7の通り、同じ親ページ内に異なる子ページが埋め込まれて表示されます。

ページ切り替え時のトランジション

 Nuxt.jsのルーティング機能では、ページ切り替え時にフェードやアニメーションなどのトランジションを設定できます。図9のサンプルで説明していきます。

図9:ページ切り替え時のトランジションを設定するサンプル(p004-transition)
図9:ページ切り替え時のトランジションを設定するサンプル(p004-transition)

 まず、トランジションを定義するCSSファイルをassetsフォルダーに配置します。

[リスト6]トランジションを定義するCSSファイル(p004-transition/assets/main.css)
.page-enter-active { /* 切り替え後のページのトランジション設定 ...(1)*/
  transition: 1s; /* 切り替え時間1秒 */
}
.page-leave-active { /* 切り替え前のページのトランジション設定 ...(2)*/
  transition: 0.5s; /* 切り替え時間0.5秒 */
}
.page-enter { /* 切り替え後ページのトランジション前スタイル ...(3)*/
  opacity: 0.5; /* 透明度0.5 */
  background-color: red; /* 赤 */
  transform: translateX(-100px); /* 左にずれた位置 */
}
.page-leave-to { /* 切り替え前のページのトランジション後スタイル ...(4)*/
  opacity: 0; /* 透明度0 */
  background-color: yellow; /* 黄色 */
  transform: translateY(100px); /* 下にずれた位置 */
}

 (1)と(2)は、切り替え前後のトランジション設定です。ここではtransitionプロパティで切り替え時間(切り替え前のページが0.5秒で消えて、切り替え後のページが1秒で表示される)を設定しています。

 (3)は切り替え後ページのトランジション開始時点のスタイルです。ここでは透明度0.5、背景が赤、左に100pxずれた位置からトランジションが開始されるように設定しています。

 (4)は、切り替え前ページのトランジション終了時点のスタイルです。ここでは、透明度0、背景が黄色、下に100pxずれた位置に移動した状態になってからページが消えるように設定しています。

 このように設定したCSSファイルは、Nuxt.jsの設定ファイルnuxt.config.jsに、リスト7の通り設定します。

[リスト7]CSSファイルを反映する設定(p004-transition/nuxt.config.js)
export default {
(略)
  css: [
    '~/assets/main.css'
  ],
(略)
}

 リスト6、7の設定を行うと、ページ切り替え時に設定されたトランジションが発生します。

 すべてのページに設定するトランジションとは別に、あるページにだけ個別にトランジションを設定することもできます。まず、CSSファイルにリスト8の通り追加します。

[リスト8]特定ページにだけ適用するトランジション定義(p004-transition/assets/main.css)
.apple-enter-active { /* 切り替え後のページのトランジション設定 */
  transition: 2s; /* 切り替え時間2秒 */
}
.apple-leave-active { /* 切り替え前のページのトランジション設定 */
  transition: 3s; /* 切り替え時間3秒 */
}
.apple-enter { /* 切り替え後ページのトランジション前スタイル */
  opacity: 0.25; /* 透明度0.25 */
  background-color: cyan; /* シアン */
  transform: translateY(-100px); /* 上にずれた位置 */
}
.apple-leave-to { /* 切り替え前のページのトランジション後スタイル */
  opacity: 0; /* 透明度0 */
  background-color: blue; /* 青 */
  transform: translateX(100px); /* 右にずれた位置 */
}

 基本的な記法はリスト6と同一ですが、CSSクラス名を「page」以外の任意の接頭辞(ここでは「apple」)で始めるようにします。

 個別にトランジションを設定するページでは、<script>のtransition属性に、CSSクラス名に設定した接頭辞を設定します。

[リスト9]ページに個別のトランジションを設定する記述(p004-transition/pages/Apple.vue)
export default {
  transition: 'apple'
}

 リスト8、9を設定すると、「/Apple」のページに遷移するときだけ、リスト8に設定した(他のページとは異なる)トランジションが行われるようになります。

まとめ

 本記事では、Nuxt.jsのルーティング機能について説明しました。Nuxt.jsでは、pagesフォルダー内のファイル配置がそのままルーティングのパスに反映されるため、直感的にページの切り替えを設定できます。また、トランジション機能を利用すると、よりリッチなページ切り替えを行うことができます。

 次回は、Webページで利用できる再利用可能な部品を作れるコンポーネントの機能について説明していきます。

参考資料

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
JavaScriptフレームワーク「Vue.js」と「Nuxt.js」の活用連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト  吉川 英一(ヨシカワ エイイチ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/11828 2019/11/26 19:06

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー