vue elementUI table表格數(shù)據(jù) 滾動(dòng)懶加載的實(shí)現(xiàn)方法
在項(xiàng)目中遇到了一個(gè)性能問(wèn)題
vue+elementUI table表格展示數(shù)據(jù),當(dāng)數(shù)據(jù)很多的時(shí)候,不能一頁(yè)顯示完,同時(shí)一次請(qǐng)求數(shù)據(jù)量太大,會(huì)增加網(wǎng)頁(yè)渲染的時(shí)間,影響體驗(yàn),
這個(gè)時(shí)候常常有兩種方法處理,
1、分頁(yè),如下

2、如果我不想分頁(yè),又想在一頁(yè)顯示全部數(shù)據(jù)呢?這個(gè)時(shí)候其實(shí)就可以用數(shù)據(jù)懶加載了
如下一開(kāi)始表格只顯示31行數(shù)據(jù)

當(dāng)將滾動(dòng)條拉到低的時(shí)候,就會(huì)再加載31條數(shù)據(jù),如果剩下的數(shù)據(jù)不足31,那就加載剩下的

根據(jù)項(xiàng)目需求,這需要一頁(yè)可以看到全部數(shù)據(jù),所以我選擇了第二中方式
那么第二種方式要怎么去實(shí)現(xiàn)呢?
在了解它的原理前,你需要分清楚三個(gè)屬性:
scrollHeight:指元素的總高度,包含滾動(dòng)條中的內(nèi)容。只讀屬性。不帶px單位。就是下圖中,54條數(shù)據(jù)的高度,但是因?yàn)橛袧L動(dòng)條,所以屏幕看不到這么高
scrollTop:當(dāng)元素出現(xiàn)滾動(dòng)條時(shí),向下拖動(dòng)滾動(dòng)條,內(nèi)容向上滾動(dòng)的距離??勺x可寫屬性。不帶px單位。如果該元素沒(méi)有滾動(dòng)條,則scrollTop的值為0,該值只能是正值。就是下圖中紅色框的高度
clientHeight:元素客戶區(qū)的大小,指的是元素內(nèi)容及其邊框所占據(jù)的空間大小,實(shí)際上就是可視區(qū)域的大小。就是下圖紅色箭頭的高度

那如何判斷滾動(dòng)條滾到底部了呢?
scrollHeight-scrollTop-clientHeight=0,這個(gè)時(shí)候可以就是滾動(dòng)條滾到底部的時(shí)候了。
在第一次請(qǐng)求數(shù)據(jù)的時(shí)候,先設(shè)置一個(gè)變量來(lái)記錄請(qǐng)求次數(shù)(其實(shí)后臺(tái)也是做分頁(yè)的處理)
this.currentPage = 1,
$this = this;
this.$axios.fun().then(res=>{
$this.totalPage = res.totalPage; //這里需要知道總頁(yè)數(shù)
$this.tableData = res.data;//表格數(shù)據(jù)
})
監(jiān)聽(tīng)表格dom對(duì)象的滾動(dòng)事件
let dom = document.querySelector(targetDom);
dom.addEventListener("scroll", function() {
const scrollDistance =dom.scrollHeight - dom.scrollTop - dom.clientHeight;
if(scrollDistance <=0){//等于0證明已經(jīng)到底,可以請(qǐng)求接口
if($this.currentPage < $this.totalPage){//當(dāng)前頁(yè)數(shù)小于總頁(yè)數(shù)就請(qǐng)求
$this.currentPage++;//當(dāng)前頁(yè)數(shù)自增
//請(qǐng)求接口的代碼
$this.$axios.fun().then(res=>{
$this.tableData = $this.tableData.concat(res.data)//將請(qǐng)求回來(lái)的數(shù)據(jù)和當(dāng)前展示的數(shù)據(jù)合并在一起
})
}
}
})
好了,表格滾動(dòng)下拉懶加載數(shù)據(jù)就是這樣實(shí)現(xiàn)的,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)歡迎給我留言,小編會(huì)及時(shí)回復(fù)大家的!
- vue(element ui)el-table樹(shù)形表格展示以及數(shù)據(jù)對(duì)齊方式
- vue?element?ui表格相同數(shù)據(jù)合并單元格效果實(shí)例
- vue+elementUI顯示表格指定列合計(jì)數(shù)據(jù)方式
- vue elementui表格獲取某行數(shù)據(jù)(slot-scope和selection-change方法使用)
- 使用vue+element?ui實(shí)現(xiàn)走馬燈切換預(yù)覽表格數(shù)據(jù)
- Vue組件庫(kù)ElementUI實(shí)現(xiàn)表格加載樹(shù)形數(shù)據(jù)教程
- vue Element UI 解決表格數(shù)據(jù)不更新問(wèn)題及解決方案
相關(guān)文章
Vue前端如何實(shí)現(xiàn)與后端進(jìn)行數(shù)據(jù)交互
這篇文章主要介紹了Vue前端如何實(shí)現(xiàn)與后端進(jìn)行數(shù)據(jù)交互,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03
vue+axios 前端實(shí)現(xiàn)的常用攔截的代碼示例
這篇文章主要介紹了vue+axios 前端實(shí)現(xiàn)的常用攔截的代碼示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-08-08
vue3封裝echarts組件的實(shí)現(xiàn)步驟
這篇文章主要介紹了如何在Vue3中封裝一個(gè)高效、可復(fù)用的ECharts組件TChart,該組件支持響應(yīng)式圖表、空數(shù)據(jù)展示、事件監(jiān)聽(tīng)、主題切換和性能優(yōu)化等功能,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-01-01
VUE 常規(guī)截取和特殊字符之前之后截取(實(shí)例代碼)
這篇文章主要介紹了VUE 常規(guī)截取和特殊字符之前之后截取,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2023-10-10
詳解使用webpack打包編寫一個(gè)vue-toast插件
本篇文章主要介紹了詳解使用webpack打包編寫一個(gè)vue插件,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-11-11

