Vue.js は、開発者が動的で応答性の高い Web アプリケーションを簡単に作成できるようにする人気の JavaScript フレームワークです。中でも、強力なコンポーネント開発機能が開発者に特に支持されています。無限スクロールとウォーターフォール レイアウトは、現代の Web 開発において不可欠な機能の 1 つになっています。
この記事の目的は、Vue.js をいくつかのサードパーティ ライブラリと組み合わせて使用し、無限スクロールとウォーターフォール フロー レイアウト機能を実現する方法を紹介することです。
無限スクロールとは、ページの下部までスクロールするときにさらに多くのコンテンツを読み込み続けて、ページ コンテンツを無限に拡大することを指します。この手法は何千ものデータ エントリに対して機能し、ユーザー エクスペリエンスを大幅に向上させることができます。
まず、少なくともいくつかのデータ項目を含むデータ ソースを準備する必要があります。ここでは、簡単な例を使用して説明します。100 個のデータ項目を含む無限にスクロール可能なリストがあるとします。データ ソースは次のようになります:
[ {id: 1, text: 'Item 1'}, {id: 2, text: 'Item 2'}, // ... more data {id: 99, text: 'Item 99'}, {id: 100, text: 'Item 100'}, ]
次に、vue-infinite-scroll というライブラリをインストールする必要があります。これは、無限スクロール機能の中心的なメカニズムと、必要な命令とコンポーネントを提供します。このライブラリをインストールするには、npm コマンドを使用できます:
npm install vue-infinite-scroll
必要な命令をグローバルに登録します:
import infiniteScroll from 'vue-infinite-scroll' Vue.use(infiniteScroll)
コンポーネントでは、いくつかの構成とデータを設定する必要があります:
<template> <div class="scroll-list" v-infinite-scroll="loadMore" infinite-scroll-disabled="busy" infinite-scroll-distance="10"> <ul> <li v-for="(item, index) in items" :key="index">{{ item.text }}</li> </ul> <div v-if="busy" class="loading"> Loading ... </div> </div> </template> <script> export default { data () { return { items: [], // 当前列表所有数据 busy: false, // 标记是否正在请求数据 page: 1, // 当前数据分页 perPage: 10, // 每页数量 total: 100, // 总数据量 } }, methods: { loadMore() { // 标记正在加载数据 this.busy = true // 模拟请求延迟 setTimeout(() => { // 构造新数据 const newItems = [] const from = (this.page - 1) * this.perPage + 1 const to = this.page * this.perPage for (let i = from; i <= to && i <= this.total; i++) { newItems.push({ id: i, text: 'Item ' + i }) } // 加载新数据 this.items = [...this.items, ...newItems] // 增加当前页数 this.page++ // 去除加载数据标记 this.busy = false }, 1000) } } } </script>
v-infinite-scroll="loadMore"
: より多くのデータをロードするコールバック関数を指定するために使用されますinfinite- scroll -disabled="busy"
: データが現在要求されているかどうかを指定するために使用されます。 infinite-scroll- distance="10"
: スクロールするピクセル数を指定するために使用されます。バーは下からです データ読み込み動作のトリガーウォーターフォール フロー (ウォーターフォール) は一般的なレイアウトです。その中心的な概念は、さまざまなサイズの項目を表示できることです。同じ行にある場合、ウォーターフォール フローのレイアウトはプロジェクトの数に応じて自動的に調整されます。 vue-waterfall と呼ばれる Vue サードパーティ コンポーネント ライブラリを使用すると、わずか数行のコードでウォーターフォール レイアウトを簡単に実装できます。
まず、vue-waterfall コンポーネント ライブラリ:
npm install vue-waterfall
グローバル登録コンポーネント:
import waterfall from 'vue-waterfall' Vue.use(waterfall)
<template> <waterfall> <div v-for="(item, index) in items" :key="index"> <h3>{{item.title}}</h3> <p>{{item.desc}}</p> <img :src="item.imgUrl" :alt="item.title"> </div> </waterfall> </template> <script> import axios from 'axios' export default { data () { return { items: [] } }, created () { axios.get('https://api.example.com/items').then(response => { this.items = response.data }) } } </script>
[ { title: 'Item 1', desc: 'This is item 1', imgUrl: 'https://example.com/item1.png', }, { title: 'Item 2', desc: 'This is item 2', imgUrl: 'https://example.com/item2.png', }, // ... ]
npm install vue-virtual-scroll-list
<template> <virtual-scroll-list :size="75" :remain="10" :items="items" :key-field="'id'"> <div slot-scope="{item}"> <h3>{{item.title}}</h3> <p>{{item.desc}}</p> <img :src="item.imgUrl" :alt="item.title"> </div> </virtual-scroll-list> </template> <script> import axios from 'axios' import VirtualScrollList from 'vue-virtual-scroll-list' export default { components: { VirtualScrollList }, data () { return { items: [] } }, created () { axios.get('https://api.example.com/items').then(response => { this.items = response.data }) } } </script>
<template> <div class="scroll-list" v-infinite-scroll="loadMore" infinite-scroll-disabled="busy" infinite-scroll-distance="10"> <ul> <li v-for="(item, index) in items" :key="index">{{ item.text }}</li> </ul> <div v-if="busy" class="loading"> Loading ... </div> </div> </template> <script> export default { data () { return { items: [], // 当前列表所有数据 busy: false, // 标记是否正在请求数据 page: 1, // 当前数据分页 perPage: 10, // 每页数量 total: 100, // 总数据量 } }, methods: { loadMore() { // 标记正在加载数据 this.busy = true // 模拟请求延迟 setTimeout(() => { // 构造新数据 const newItems = [] const from = (this.page - 1) * this.perPage + 1 const to = this.page * this.perPage for (let i = from; i <= to && i <= this.total; i++) { newItems.push({ id: i, text: 'Item ' + i }) } // 加载新数据 if (this.page <= 10) { this.items = [...this.items, ...newItems] // 增加当前页数 this.page++ } else { this.busy = true } // 去除加载数据标记 this.busy = false }, 1000) } } } </script>
以上がVue を使用して無限スクロールとウォーターフォール フローのレイアウトを構築するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。