zukucode
主にWEB関連の情報を技術メモとして発信しています。

vue-router ページ遷移時にアニメーションスクロールをする

vue-routerでページ遷移するときにスクロールの位置をトップ(一番上)に移動させたいとき、公式サンプルにしたがって以下のように実装します。

const router = new VueRouter({
  routes: [...],
  scrollBehavior (to, from, savedPosition) {
    return { x: 0, y: 0 }; // トップに移動
  }
})

JavaScript ページの先頭までアニメーションスクロールをするで紹介したように、スクロールをアニメーションで移動させたいときは別の方法で実装する必要があります。

routerの値をwatchして、変更されたタイミングでスクロールの処理を実行します。scrollToファンクションはJavaScript ページの先頭までアニメーションスクロールをするで紹介しています。

watch: {
  '$route' (newValue, oldValue) {
    scrollTo(0, 600); // トップに移動
  }
}

あまり綺麗な方法でないので他にもっといい方法があるかもしれませんが、これで違和感なくスクロールさせることができます。

うまく動かない場合

うまく動かない場合は以下のようにnextTickを使い、DOM更新後に処理を行うようにするとうまくいくかもしれません。

watch: {
  '$route' (newValue, oldValue) {
    this.$nextTick(() => {
      scrollTo(0, 600); // トップに移動
    }
  }
}

関連記事

  • vue-router webpackでページごとにファイルを分割する

    vue-routerでシングルアプリケーションを作成していると、ページ数が増えるにしたがって作成されるjsファイルのファイルサイズもどんどん増えていきます。ページごとにファイルを分割し、そのページがア...


  • vue-router 現在のパスによってスタイルを変更する

    vue-routerでシングルページアプリケーションを作成する際に、例えばヘッダやサイドバーのナビゲーションで現在表示しているページのリンクを無効にしたり色を変えたりしたい場合があります。現在表示して...


  • vue-routerを導入してSPAを作成する

    Vue.jsのプロジェクトにvue-routerを導入してシングルページアプリケーション(spa)を作成します。開発環境やフォルダ構成はwebpack モジュールのパスを絶対パスで指定する方法で扱った...


  • vue-router 各ページ表示時に処理を行う

    vue-routerで各ページに遷移したタイミングで初期化などのメソッドをコールしたい場合があります。以下のようにbeforeRouteEnterで各ページ起動時に処理を行うことができます。befor...


  • Vue Router ページの表示時と離脱時のイベントをコンポーネントで設定する

    Vue Rtouterでページの表示時と離脱時のイベントをコンポーネントで設定する方法を紹介します。ページ表示時のイベントはbeforeRouteEnterを使用します。beforeRouteEnte...


  • vueコンポーネントでvue-routerのページ制御を行う

    vueコンポーネントの処理でvue-routerのページ制御を行う方法を紹介します。vue-routerでページ遷移するときはrouter-linkのコンポーネントを使うことが多いですが、コンポーネン...


  • Electronとvue-routerを併用するときの注意点

    Electronとvue-routerを使うときに、ページ制御がうまく行かないときはrouterの設定を確認します。modeがhistoryになっているとなぜかうまく行かなかったのでhashに変更しま...


  • webpack lessをImportしてビルドする

    Vue.js lessを使いwebpackでビルドするでvueファイルの中でlessを実装してビルドする方法を紹介しました。htmlやbodyなどに適用するベースのクラスを外部のlessファイルに実装...


  • ExtractTextPluginでcssファイルを出力する

    webpackのプラグインExtractTextPluginを使って、ビルドされたjsファイルからstyleの部分を抽出してcssファイルで出力します。extract-text-webpack-plu...


  • webpack-dev-serverで開発サーバーを起動する

    webpack-dev-serverで開発サーバーを起動します。ファイルやフォルダ構成などの環境はvueファイル(単一ファイルコンポーネント)をwebpackでビルドで紹介したものと同様とします。we...