Vue.js で PeachScript/vue-infinite-loading を使った無限スクロール(Infinite Scroll)
はじめに
Vue.js で PeachScript/vue-infinite-loading を使った無限スクロール(Infinite Scroll)の実装方法。
TL;DR
npm i vue-infinite-loading
でインストール<infinite-loading @infinite="infiniteHandler" />
を記述infinite
イベントのハンドラ内でデータの追加や、読み込み完了などの処理を実施
目次
環境・条件
1 | $ sw_vers |
詳細
基本的に公式ドキュメントの通り。
セットアップ
参考: Installation
npm i
でインインストール
1 | $ npm i vue-infinite-loading |
参考: Plugin API
プロジェクト全体で使うなら Vue.use
で設定。
src/main.js
1 | import InfiniteLoading from 'vue-infinite-loading'; |
参考: Component
特定コンポーネントで使うなら components
で設定。
xxxx.vue
1 | <script> |
使い方
基本
<infinite-loading>
タグを配置し、@infinite
でスクロール時(下端付近までスクロールを検出時)のハンドラを設定。
以下は 100件まで item xx
が追加されるシンプルな実装例。(公式ドキュメントは axios を使ってるが、わかりやすいように単純化)
1 | <template> |
無限スクロールをリセットしたい
identifier
プロパティを変更することで、別の無限スクロールとしてリセットさせることができる。
↓は細かい箇所は省略、実際には「検索ワードの変更(再検索)」「タブの切り替え」などのイベントに合わせて identifier
(に bind しているデータ)を変更する。
1 | <template> |
下から上にスクロールさせたい
direction
プロパティに top
を設定し、ハンドラ内で先頭にデータを追加するようにすれば OK
1 | <template> |
メッセージを変更したい
全件取得完了、追加読み込み中に表示されるメッセージを変更するには spinner
, no-more
, no-results
を設定
1 | <infinite-loading @infinite="infiniteHandler"> |
Plugin API で利用している場合は以下のように Vue.use
時点で設定することも可能っぽい (試してない)。
1 | Vue.use(InfiniteLoading, { |
まとめ
npm i vue-infinite-loading
でインストール<infinite-loading @infinite="infiniteHandler" />
を記述infinite
イベントのハンドラ内でデータの追加や、読み込み完了などの処理を実施
その他・メモ
2020/08/08 時点で(4baed2bb07
)の実装方法は scroll
イベントでの検出っぽい。
性能面で気になるなら IntersectionObserver
を使う方が良いかもしれない。
※vue-infinite-loading の性能を計測したわけではないので、そこまで気にしなくても良いかもしれない。
以下、参考になりそうなページ (中身はちゃんと見てない)。
- vue.jsで無限スクロール(infinite scrolling) | アールエフェクト
- alexjoverm/v-lazy-image: Lazy load images using Intersection Observer, apply progressive rendering and css animations.
- heavyy/vue-intersect: A Vue component to add intersection-observer to a Vue component or HTML element.
参考文献
- PeachScript/vue-infinite-loading: An infinite scroll plugin for Vue.js.
- Guide | Vue-infinite-loading
関連記事
- Chart.js(vue-chartjs) でツールチップの表示内容を変更
- Vue.js で日本語変換での誤発火を抑止しつつ Enter キーで Submit
- Vue で子コンポーネントのメソッドをコールする
- apertureless/vue-chartjs でチャートの高さ(や幅、サイズ)を変更
- Chart.js で X軸, Y軸の値をカスタマイズ
- Chart.js(vue-chartjs) で凡例の一部を非表示にする方法
- JavaScript で URL のクエリパラメータを操作する方法
- jQuery Select2 で、初期値の設定と選択状態のクリア