如今web開發中,無限載入是必需的一項功能,尤其是在移動端開發中,一個列表往往預設只載入10條,想看更多只能逐漸往下翻頁。那麼今天就看看如何在Vue-Cli中實現這個功能。 當前找到兩個插件 1 element-ui的infiniteScroll無限滾動(適合vue2,vue3) infiniteS ...
如今web開發中,無限載入是必需的一項功能,尤其是在移動端開發中,一個列表往往預設只載入10條,想看更多只能逐漸往下翻頁。那麼今天就看看如何在Vue-Cli中實現這個功能。
當前找到兩個插件
1 element-ui的infiniteScroll無限滾動(適合vue2,vue3)
infiniteScroll是2.9.0版本新增的特性,舊的項目需要升級element版本(註意升級可能導致其他頁面的無措,謹慎升級)
鏈接 https://element.eleme.cn/2.12/#/zh-CN/component/infiniteScroll
<template> <ul class="infinite-list" v-infinite-scroll="load" style="overflow:auto"> <li v-for="i in count" class="infinite-list-item">{{ i }}</li> </ul> </template> <script> export default { data () { return { count: 0 } }, methods: { load () { this.count += 2 } } } </script>
2vue-infinite-scroll(官網https://github.com/ElemeFE/vue-infinite-scroll)只適合vue2
步驟 1 npm install vue-infinite-scroll --save
2 import infiniteScroll from 'vue-infinite-scroll'
Vue.use(infiniteScroll)
使用示例,此處只寫相關代碼
<div v-infinite-scroll="loadMore" infinite-scroll-disabled="busy" infinite-scroll-distance="10"> <div v-for="item in data" :key="item.index">{{item.name}}</div> </div>
data () { return { count: 0, data: [], busy: false } }
methods: { loadMore: function() { this.busy = true setTimeout(() => { for (var i = 0, j = 10; i < j; i++) { this.data.push({name: this.count++ }) } console.log(this.data) this.busy = false }, 1000) } }
效果 預設會載入10行數據,只要往下滾動到頁面底部,就會在1秒後再次載入10條,然後繼續滾動,又會載入10條,實際情況到一定程度停止刷新
參數解釋
v-infinite-scroll="loadMore"
表示回調函數是loadMore
infinite-scroll-disabled="busy"
表示由變數busy
決定是否執行loadMore
,false
則執行loadMore
,true
則不執行,看清楚,busy表示繁忙,繁忙的時候是不執行的。 infinite-scroll-distance="10"
這裡10
決定了頁面滾動到離頁尾多少像素的時候觸發回調函數,10
是像素值。通常我們會在頁尾做一個幾十像素高的“正在載入中...”,這樣的話,可以把這個div的高度設為infinite-scroll-distance
的值即可。
infinite-scroll-immediate-check
預設值為true
,該指令意思是,應該在綁定後立即檢查busy的值和是否滾動到底。如果你的初始內容高度不夠高、不足以填滿可滾動的容器的話,你應設為true
,這樣會立即執行一次loadMore
,會幫你填充一些初始內容。 infinite-scroll-listen-for-event
當事件在Vue實例中發出時,無限滾動將再次檢查。 infinite-scroll-throttle-delay
檢查busy
的值的時間間隔,預設值是200,因為vue-infinite-scroll的基礎原理就是,vue-infinite-scroll會迴圈檢查busy
的值,以及是否滾動到底,只有當:busy為false且滾動到底,回調函數才會執行