在項目中遇到了一個性能問題vue
vue+elementUI table表格展現數據,當數據不少的時候,不能一頁顯示完,同時一次請求數據量太大,會增長網頁渲染的時間,影響體驗,
這個時候經常有兩種方法處理,ios
一、分頁,以下axios
二、若是我不想分頁,又想在一頁顯示所有數據呢?這個時候其實就能夠用數據懶加載了dom
以下一開始表格只顯示31行數據性能
當將滾動條拉到低的時候,就會再加載31條數據,若是剩下的數據不足31,那就加載剩下的this
根據項目需求,這須要一頁能夠看到所有數據,因此我選擇了第二中方式spa
那麼第二種方式要怎麼去實現呢?code
在瞭解它的原理前,你須要分清楚三個屬性:
scrollHeight:指元素的總高度,包含滾動條中的內容。只讀屬性。不帶px單位。就是下圖中,54條數據的高度,可是由於有滾動條,因此屏幕看不到這麼高
scrollTop:當元素出現滾動條時,向下拖動滾動條,內容向上滾動的距離。可讀可寫屬性。不帶px單位。若是該元素沒有滾動條,則scrollTop的值爲0,該值只能是正值。就是下圖中紅色框的高度
clientHeight:元素客戶區的大小,指的是元素內容及其邊框所佔據的空間大小,實際上就是可視區域的大小。就是下圖紅色箭頭的高度對象
那如何判斷滾動條滾到底部了呢?blog
scrollHeight-scrollTop-clientHeight=0,這個時候能夠就是滾動條滾到底部的時候了。
在第一次請求數據的時候,先設置一個變量來記錄請求次數(其實後臺也是作分頁的處理)
this.currentPage = 1, $this = this; this.$axios.fun().then(res=>{ $this.totalPage = res.totalPage; //這裏須要知道總頁數 $this.tableData = res.data;//表格數據 })
監聽表格dom對象的滾動事件
let dom = document.querySelector(targetDom); dom.addEventListener("scroll", function() { const scrollDistance =dom.scrollHeight - dom.scrollTop - dom.clientHeight; if(scrollDistance <=0){//等於0證實已經到底,能夠請求接口 if($this.currentPage < $this.totalPage){//當前頁數小於總頁數就請求 $this.currentPage++;//當前頁數自增 //請求接口的代碼 $this.$axios.fun().then(res=>{ $this.tableData = $this.tableData.concat(res.data)//將請求回來的數據和當前展現的數據合併在一塊兒 }) } } })
好了,表格滾動下拉懶加載數據就是這樣實現的,但願能夠幫到有需求的同窗。