目次
はじめに
今回は無限スクロールライブラリ「Vue-infinite-loading」をご紹介します。
環境
Vue.js: 2.6.10
Vue-infinite-loading: 2.4.4
インストール
以下のnpm、CDNのどれか一つを使ってインストールします。
npm
npm install vue-infinite-loading -S
CDN
<script src="https://unpkg.com/vue-infinite-loading@2.4.4/dist/vue-infinite-loading.js"></script>
gitリポジトリは以下から取得できます。
https://github.com/PeachScript/vue-infinite-loading
導入手順
1. ライブラリの取り込み
1.1 webpack等の場合
import InfiniteLoading from 'vue-infinite-loading'; Vue.use(InfiniteLoading);
1.2 WEBページの場合
Vue.use(window.VueInfiniteLoading);
2. 分割読み込みロジック
データを分割するためのロジックを準備します。
$state.loaded()
を介してこのプラグインにデータがあることを伝えます。
$state.complete
を通じてこのプラグインにすべてのデータがロードされたことを通知します。
var todos = []; // ダミーデータを100個作成 for(var i=0;i<100;i++){ todos.push({ text: "コンテンツ" + i, done: false }); } new Vue({ el: "#app", data: { page: 0, todos: [] }, methods: { infiniteHandler($state) { var self = this; if (self.todos.length >= this.page) { // アイテム数が最大値以下だったら todos.slice(this.page,this.page+10).filter(function(item){ self.todos.push(item); return item; }); this.page += 10; $state.loaded(); } else { // アイテム数が最大数だったら終了 $state.complete(); } }, } });
3. テンプレートを準備
<div id="app"> <h2>リスト:</h2> <ol> <li v-for="(todo,index) in todos" :key="index">{{ todo.text }}</li> </ol> <infinite-loading @infinite="infiniteHandler"></infinite-loading> </div>
デモ
まとめ
無限スクロールを簡単に実装できる「Vue-infinite-loading」でした。
ドキュメントも充実しているので、非常に心強いです。
https://peachscript.github.io/vue-infinite-loading/
今日はこの辺でー