在項(xiàng)目中遇到了一個(gè)性能問(wèn)題
創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的衡山網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!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ù)懶加載了
如下一開始表格只顯示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單位。如果該元素沒有滾動(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ù) })