el-table渲染慢卡頓問題最優解決方案
1.如下圖,需要綁定兩個id,第一個id是需要浮動的元素,加上scroll方法監聽滑塊變化,第二個id是其子元素。
2.給eagleMapContainer設置overflow屬性和滑塊樣式,CSS參考如下
#eagleMapContainer{ overflow-y: auto; margin-top: 10px; min-height: 150px; max-height: 600px; } #eagleMapContainer::-webkit-scrollbar { width: 6px; /*對垂直流動條有效*/ height: 6px; } #eagleMapContainer::-webkit-scrollbar-track{ background-color:rgba(0,0,0,0.1); } #eagleMapContainer::-webkit-scrollbar-thumb{ border-radius: 6px; background-color: rgba(0,0,0,0.2); } /*定義右下角匯合處的樣式*/ #eagleMapContainer::-webkit-scrollbar-corner { background:rgba(0,0,0,0.2); }
3.在methods添加如下方法監聽滑動
hanldeScroll(e) { // 獲取eagleMapContainer的真實高度 const boxHeight = document.getElementById('eagleMapContainer').offsetHeight // 獲取table_list的真實高度(浮動內容的真實高度) const tableHeight = document.getElementById('table_list').offsetHeight // boxHeight和滑塊浮動的高度相差小於50 && 不在加載中 && 不是最後一頁 if (tableHeight - (e.target.scrollTop + boxHeight) < 50 && !this.loading && this.listPage < (this.tableList.length / 300)) { // 第一次觸發時,記錄滑塊高度 // data裡scrollTop,listPage默認為0 if (!this.scrollTop) { this.scrollTop = e.target.scrollTop } // 觸發下拉加載更多 this.queryMoreStat(true, tableHeight, boxHeight) } else if (e.target.scrollTop === 0 && !this.loading) { // 如果滑塊上拉到頂部,則向上加載300條 this.queryMoreStat(false, tableHeight, boxHeight) } }
4.在methods添加如下方法,滑塊置頂或觸底(實現原理:始終隻渲染當前300條和前後的300條,一共900條數據)
queryMoreStat(type, tableHeight, boxHeight) { this.loading = true // 觸底加載 if (type) { this.listPage = this.listPage + 1 const centerPage = this.listPage * 300 const startPage = centerPage >= 300 ? centerPage - 300 : centerPage const endPage = centerPage + 600 const newList = this.tableList.slice(startPage, endPage) if (this.listPage > 0) { const box = document.getElementById('eagleMapContainer') // 視圖跳到觸發的數據,補回50的高度差值 box.scrollTop = this.scrollTop + 50 } this.list = newList } else { // 置頂加載 if (this.listPage > 0) { this.listPage = this.listPage - 1 const centerPage = this.listPage * 300 const startPage = centerPage >= 300 ? centerPage - 300 : centerPage const endPage = centerPage + 600 const newList = this.tableList.slice(startPage, endPage) if (this.listPage > 0) { const box = document.getElementById('eagleMapContainer') box.scrollTop = tableHeight - this.scrollTop - boxHeight } this.list = newList } else { this.list = this.tableList.slice(0, 300) } } this.$nextTick(() => { this.loading = false }) }
到此這篇關於el-table渲染慢卡頓問題最優解決方案的文章就介紹到這瞭,更多相關el-table渲染慢卡頓內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!