0Pricing
Vue Academy · レッスン

スクロール動作の設定

scrollBehavior(to, from, savedPosition)、スムーズスクロール、ハッシュへのスクロール、位置の復元

「スクロール動作の設定」はCoddyKit上の無料Vue Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはVue Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Vue Academyコースには全4レッスンが含まれています。

ナビゲーション時のスクロールを制御する

シングルページアプリではページが再読み込みされないため、ブラウザーがスクロール位置を自動的にリセットすることはありません。Vue Router の scrollBehavior 関数を使うと、ナビゲーション後にページをどこへスクロールするかを決められます。

設定場所

ルーターを作成するときに scrollBehavior を渡します。これはすべてのナビゲーションで実行されます。

const router = createRouter({
  history: createWebHistory(),
  routes,
  scrollBehavior(to, from, savedPosition) {
    // return a position
  }
})

3 つのパラメーター

to(対象ルート)、from(現在のルート)、savedPosition を受け取ります。最後の値が null 以外になるのは、ブラウザーの戻るボタンまたは進むボタンで移動した場合だけです。

新しいルートでは先頭へスクロールする

最も単純な動作は、ユーザーが新しいページへ移動するたびに先頭へスクロールすることです。

scrollBehavior(to, from, savedPosition) {
  return { top: 0 }
}

戻るときに位置を復元する

savedPosition が存在する場合はそれを返します。これにより、戻るボタンを押すとユーザーがいた位置に正確に戻り、ネイティブのブラウザーと同じ動作になります。

scrollBehavior(to, from, savedPosition) {
  if (savedPosition) {
    return savedPosition
  }
  return { top: 0 }
}

savedPosition が重要な理由

savedPosition を復元しないと、戻るボタンを押したとき、スクロールしていた長いリストの先頭にユーザーが戻されてしまいます。これを返すことで、元の位置を保持できます。

アンカーへスクロールする

対象 URL に #section のようなハッシュがある場合は、el セレクターを返してその要素までスクロールします。

scrollBehavior(to) {
  if (to.hash) {
    return { el: to.hash }
  }
  return { top: 0 }
}

スムーズスクロール

behavior: 'smooth' を追加すると、瞬時に移動するのではなく、スクロールをアニメーションさせられます。

scrollBehavior(to) {
  if (to.hash) {
    return { el: to.hash, behavior: 'smooth' }
  }
}

固定ヘッダー分のオフセットを設定する

固定表示のヘッダーが対象アンカーを覆うことがあります。top をオフセットとして追加し、要素がヘッダーの下に配置されるようにします。

scrollBehavior(to) {
  if (to.hash) {
    return { el: to.hash, top: 80 }
  }
}

スクロールを遅延させる

コンテンツが非同期で読み込まれる場合は、遅延後に位置を解決する Promise を返します。これにより、スクロールが実行される時点で対象が存在するようにできます。

scrollBehavior(to, from, savedPosition) {
  return new Promise((resolve) => {
    setTimeout(() => resolve({ top: 0 }), 300)
  })
}

ルールを組み合わせる

完全なハンドラーでは、まず保存された位置、次にハッシュアンカーを優先し、それ以外の場合は先頭を返します。

scrollBehavior(to, from, savedPosition) {
  if (savedPosition) return savedPosition
  if (to.hash) return { el: to.hash, behavior: 'smooth' }
  return { top: 0 }
}

理解度チェック

スクロール動作についての知識を確認します。

まとめ

scrollBehavior はナビゲーション時のスクロールを制御します。

  • to、from、savedPosition を受け取ります。
  • savedPosition を返すと、戻るボタンを押したときの位置を復元できます。
  • { el: to.hash } を返すと、アンカーへスクロールします。
  • 新しいルートへの新規ナビゲーションでは { top: 0 } を返します。

よくある質問

「スクロール動作の設定」レッスンは無料ですか?

はい。「スクロール動作の設定」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Vue Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Vue Academyコースには全4レッスンが含まれています。

「スクロール動作の設定」で何を学びますか?

scrollBehavior(to, from, savedPosition)、スムーズスクロール、ハッシュへのスクロール、位置の復元 ブラウザで直接実行するハンズオンコードでVue Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Vue Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのVue Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「スクロール動作の設定」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このVue Academyレッスンでコードを書いて実行できますか?

はい。すべてのVue Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. ルートメタフィールドと型付け
  2. ルート遷移とアニメーション
  3. スクロール動作の設定
  4. プログラムによるナビゲーションとuseRouter
← Vue Academyに戻る