超實(shí)用的全新JavaScript事件Scrollend實(shí)例詳解
概述
在開發(fā)中,可能會遇到當(dāng)頁面滾動停止之后執(zhí)行某些操作的需求。在 scrollend
事件之前,并沒有可靠的方法來檢測頁面滾動是否完成。這意味著事件會延遲觸發(fā),或者當(dāng)用戶的手指仍在屏幕上時(shí)觸發(fā)。這種不可靠性導(dǎo)致了錯誤和用戶體驗(yàn)不佳。
以前可能會使用定時(shí)器來檢測滾動停止:
document.onscroll = event => { clearTimeout(window.scrollEndTimer) window.scrollEndTimer = setTimeout(callback, 100) }
這個(gè) setTimeout()
可以知道滾動是否停止了 100 毫秒。這使它更像是滾動已暫停事件,而不是滾動已結(jié)束事件。
有了 scrollend
事件,瀏覽器就會幫我們完成滾動停止的監(jiān)聽:
document.onscrollend = event => {…}
可以在 Codepen 查看示例:codepen.io/web-dot-dev…,當(dāng)滾動停止時(shí)會有提示。核心代碼如下:
document.onscrollend = event => { Toast('scroll end') }
使用
scrollend
事件會在以下情況被觸發(fā):
- 用戶的觸摸已被釋放;
- 用戶的指針已釋放滾動條;
- 用戶的按鍵已被釋放;
- 滾動到片段已完成;
- 滾動捕捉已完成;
scrollTo()
已完成;- 用戶已滾動視覺視口。
scrollend
事件在以下情況不會觸發(fā):
- 用戶的手勢沒有導(dǎo)致任何滾動位置變化;
scrollTo()
沒有產(chǎn)生任何移動。
這個(gè)事件花了很長時(shí)間才出現(xiàn)在 Web 平臺上的一個(gè)原因就是有許多小細(xì)節(jié)需要進(jìn)行規(guī)范。最復(fù)雜的就是視覺視口與文檔的滾動結(jié)束細(xì)節(jié)。對于放大的網(wǎng)頁,在此縮放狀態(tài)下,可以四處滾動,但不一定是在滾動文檔。不過,即使是這個(gè)視覺視口用戶驅(qū)動的滾動交互也會在完成后發(fā)出 scrollend
事件。
與其他滾動事件一樣,可以通過多種方式注冊偵 聽 器:
addEventListener("scrollend", (event) => { // scroll ended }); aScrollingElement.addEventListener("scrollend", (event) => { // scroll ended });
也可以使用事件屬性:
document.onscrollend = (event) => { // scroll ended }; aScrollingElement.onscrollend = (event) => { // scroll ended };
瀏覽器支持
目前僅 Firefox 109 版本支持 scrollend
事件。不久的將來,Chrome 111 版本也將支持該事件。
如果現(xiàn)在想要使用這個(gè)事件,可以在開始時(shí)檢查支持情況,如果不支持該事件就繼續(xù)使用當(dāng)前的滾動結(jié)束策略(如果有的話):
if ('onscrollend' in window) { document.onscrollend = callback } else { document.onscroll = event => { clearTimeout(window.scrollEndTimer) window.scrollEndTimer = setTimeout(callback, 100) } }
這樣就能在可用時(shí)漸進(jìn)增強(qiáng) scrollend
事件。當(dāng)然也可以使用 polyfill:github.com/argyleink/s…
首先在終端中安裝npm包:
npm i -D scrollyfills
然后在要的地方使用 scrollend
事件:
import {scrollend} from 'scrollyfills'; someElementThatScrolls.addEventListener('scrollend', event => { console.log('scroll has ended'); });
polyfill 將漸進(jìn)增強(qiáng)以使用瀏覽器內(nèi)置的 scrollend 事件(如果可用)。 如果它不可用,腳本會監(jiān)視指針事件并滾動以對它可能結(jié)束的事件進(jìn)行最佳評估。
參考:developer.chrome.com/blog/scroll…
以上就是超實(shí)用的全新JavaScript事件Scrollend實(shí)例詳解的詳細(xì)內(nèi)容,更多關(guān)于JavaScript Scrollend事件的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
JavaScript實(shí)現(xiàn)郵箱后綴提示功能的示例代碼
這篇文章主要介紹了JavaScript實(shí)現(xiàn)郵箱后綴提示功能的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-12-12Input 特殊事件onpopertychange和oninput
onpopertychange和oninput的區(qū)別。2009-06-06在js中做數(shù)字字符串補(bǔ)0(js補(bǔ)零)
這篇文章主要介紹了在js中做數(shù)字字符串補(bǔ)0(js補(bǔ)零),需要的朋友可以參考下2017-03-03JavaScript 預(yù)解析的4種實(shí)現(xiàn)方法解析
這篇文章主要介紹了JavaScript 預(yù)解析的4種實(shí)現(xiàn)方法解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09JavaScript實(shí)現(xiàn)生成動態(tài)表格和動態(tài)效果的方法詳解
這篇文章主要介紹了如何通過JavaScript語言實(shí)現(xiàn)動圖表格的生成以及動態(tài)效果的實(shí)現(xiàn),文中的示例代碼講解詳細(xì),感興趣的可以了解一下2022-02-02