簡介
分頁、優(yōu)化、可視區(qū)域、無限加載
寫前端頁面時(shí)最經(jīng)常遇到的開發(fā)需求之一就是 渲染后端數(shù)據(jù)返回的數(shù)據(jù)對象,當(dāng)數(shù)據(jù)對象數(shù)量極多的時(shí)候便需要進(jìn)行分頁。
常見的分頁方式有三種:
在頁面底部生成 上一頁、下一頁、頁面列表 按鈕。
用戶可以很直接的選擇自己需要瀏覽的頁面。
不需要擔(dān)心頁面數(shù)據(jù)過多造成的卡頓。
比起 自動(dòng)加載更多數(shù)據(jù) 略顯不智能。
在頁面底部生成 加載更多數(shù)據(jù) 按鈕。
相對于頁面底部生成分頁相關(guān)按鈕體驗(yàn)好一點(diǎn)
用戶可以控制自己是否需要加載更多數(shù)據(jù)。
比起 自動(dòng)加載更多數(shù)據(jù) 略顯不智能。
需要注意頁面數(shù)據(jù)過多造成的卡頓。
當(dāng)用戶滾動(dòng)到頁面底部時(shí) 自動(dòng)加載更多數(shù)據(jù)。
更符合用戶直覺體驗(yàn)很好。
需要注意頁面數(shù)據(jù)過多造成的卡頓。
如果頁腳有其他數(shù)據(jù)用戶需要翻遍數(shù)據(jù)才能看到頁腳。
當(dāng)然分頁沒有絕對的銀彈得根據(jù)不同的情況進(jìn)行略微的調(diào)整和交叉搭配使用分頁方式。例如:頁面頁腳有需要用戶查看的數(shù)據(jù)時(shí),可以使用 自動(dòng)加載更多數(shù)據(jù),當(dāng)加載二到三頁時(shí)提示 加載更多數(shù)據(jù) 按鈕,使得特定用戶可以較為方便的看到頁腳內(nèi)容更多的情景就不一一列舉了。
頁面數(shù)據(jù)過多造成的卡頓可以參考 每日 30 秒之 chunk 中給出的情景案例,利用 數(shù)據(jù)分組顯示 來減少 DOM 節(jié)點(diǎn)進(jìn)而優(yōu)化頁面卡頓,這里不討論分頁及其相關(guān)的優(yōu)化。
今天分享的代碼是分頁過程中會(huì)用到的一個(gè)函數(shù) 判斷是否到達(dá)了頁面底部:
// 該源碼來自于 https://30secondsofcode.org const bottomVisible = () => document.documentElement.clientHeight + window.scrollY >= (document.documentElement.scrollHeight || document.documentElement.clientHeight);代碼分析
窗口可見區(qū)域的高度 和 窗口已經(jīng)滾動(dòng)的距離高度 得到當(dāng)前頁面所處的位置:
document.documentElement.clientHeight + window.scrollY
再與 整個(gè)頁面的高度 作比較來判斷是否已經(jīng)到達(dá)了頁面底部,如果 整個(gè)頁面的高度 不存在則使用 窗口可見區(qū)域的高度 做代替:
... >= (document.documentElement.scrollHeight || document.documentElement.clientHeight)
小技巧:利用 || 技巧來初始化數(shù)據(jù)使用場景
做一個(gè)無限加載數(shù)據(jù)項(xiàng)的分頁功能,當(dāng)頁面到達(dá)底部時(shí)進(jìn)行數(shù)據(jù)加載。
// 監(jiān)聽頁面滾動(dòng) document.addEventListener("scroll", () => { // 如果到達(dá)頁面底部 if(bottomVisible()) { // 1.發(fā)送網(wǎng)絡(luò)請求獲取數(shù)據(jù) // 2.插入數(shù)據(jù)到頁面 } });相似代碼
判斷是否到達(dá)了頁面頂部
const topVisible = () => window.scrollY == 0一起成長
在困惑的城市里總少不了并肩同行的 伙伴 讓我們一起成長。
如果您想讓更多人看到文章可以點(diǎn)個(gè) 點(diǎn)贊。
如果您想激勵(lì)小二可以到 Github 給個(gè) 小星星。
如果您想與小二更多交流添加微信 m353839115。
本文原稿來自 PushMeTop
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/109151.html
showImg(https://segmentfault.com/img/remote/1460000018891197); 簡介 無障礙、WAI、ARIA、a11y、Accessibility、框架選擇 如何向 視障用戶 介紹兔子長什么樣?有的同學(xué)可能會(huì)說: 毛茸茸的長耳朵。 短短圓圓的小尾巴。 紅紅的眼睛。 那如何向 視障用戶 介紹網(wǎng)頁長什么樣?有看過 語義化與無障礙樹 的同學(xué)可能會(huì)說: ...
簡介 可視區(qū)域、頁面優(yōu)化、DOM節(jié)點(diǎn)多、圖片懶加載、性能 可視區(qū)域是一個(gè)前端優(yōu)化經(jīng)常出現(xiàn)的名詞,不管是顯示器、手機(jī)、平板它們的可視區(qū)域范圍都是有限。在這個(gè) 有限可視區(qū)域 區(qū)域里做到完美顯示和響應(yīng),而在這個(gè)區(qū)域外少做一些操作來減少渲染的壓力、網(wǎng)絡(luò)請求壓力。在 每日 30 秒之 對海量數(shù)據(jù)進(jìn)行切割 中的使用場景,我們就是利用了 有限可視區(qū)域 只渲染一部分 DOM 節(jié)點(diǎn)來減少頁面卡頓。 既然 可視區(qū)域 ...
showImg(https://segmentfault.com/img/remote/1460000018781682?w=900&h=500); 簡介 剪貼板、復(fù)制、兼容 復(fù)制內(nèi)容到剪貼板 是前端開發(fā)過程中會(huì)經(jīng)常遇到的一個(gè)需求,大部分同學(xué)開發(fā)時(shí)往往會(huì)直接打開搜索框開始尋找別人寫好的組件庫,而聰明的同學(xué)會(huì)開始思考問題: 產(chǎn)品的使用場景是什么? 是否需要兼容很多瀏覽器? 是否在項(xiàng)目中需要頻繁使用...
showImg(https://segmentfault.com/img/remote/1460000018770987?w=900&h=500); 簡介 數(shù)組、every、any 判斷一個(gè)數(shù)組中是否都滿足特定的條件,如果滿足則返回 true 否則返回 false。 // 該源碼來自于 https://30secondsofcode.org const all = (arr, fn = Boole...
showImg(https://segmentfault.com/img/remote/1460000018808058?w=900&h=500); 簡介 SEO、sitemap、搜索引擎優(yōu)化、簡單教程 在曖昧期和暗戀期時(shí)心里總是懸掛著: ta 為什么還不和我表白? ta 是不是對我沒感覺? ta 是不是只是把我當(dāng)備胎? ta 是不是對誰都這樣? 解決問題最簡單的方式就是直接 問問對方...
閱讀 2347·2021-11-15 11:38
閱讀 3557·2021-09-22 15:16
閱讀 1200·2021-09-10 11:11
閱讀 3169·2021-09-10 10:51
閱讀 2949·2019-08-30 15:56
閱讀 2788·2019-08-30 15:44
閱讀 3193·2019-08-28 18:28
閱讀 3533·2019-08-26 13:36