刪除逾時函式並搖動相關錯誤。您真正需要的事件如下:捲動結束。
在 scrollend
事件之前,目前無法偵測到捲動的可靠方式
。這表示事件會延遲觸發,或在使用者手指仍在螢幕上時觸發。這種無法可靠地得知捲動動作實際結束的情況,會導致錯誤並造成使用者體驗不佳。
document.onscroll = event => { clearTimeout(window.scrollEndTimer) window.scrollEndTimer = setTimeout(callback, 100) }
這項「setTimeout()
」策略最適合的分析方法,就是瞭解捲動作業是否停止
100ms
。這會更像是捲動已暫停事件,而非捲動已結束事件。
在 scrollend
事件之後,瀏覽器會為您執行所有艱難的評估作業。
document.onscrollend = event => {…}
這很棒。在觸發前,以完美的時間安排和充滿意義的條件,進行廣告放送。
試試看!
活動詳細資料
scrollend
事件會在下列情況觸發:
- 瀏覽器不再是捲動的動畫或翻譯內容。
- 使用者已放開觸控。- 使用者的指標釋放了捲動指標。
- 使用者的按鍵動作已放開。
- 捲動至片段已完成。
- 捲動對齊作業已完成。
- scrollTo()
已完成。
- 使用者捲動了視覺可視區域。
以下情況下,系統不會觸發 scrollend
事件:
- 使用者的手勢並未導致任何捲動位置變更 (未發生轉譯)。- scrollTo()
沒有找到任何翻譯。
這場活動需要多久時間才會送到網路平台
小細節。其中最複雜的部分,是說明 scrollend
與視覺視區和文件的詳細資料。假設你放大的網頁。你可以捲動畫面
並顯示在這個縮放狀態中
文件。就算使用者操作的是這個可視區域捲動畫面,也不必擔心
互動完成後,就會發出 scrollend
事件。
使用事件
如同其他捲動事件,您可以透過幾種方式註冊事件監聽器。
addEventListener("scrollend", (event) => {
// scroll ended
});
aScrollingElement.addEventListener("scrollend", (event) => {
// scroll ended
});
或使用事件屬性:
document.onscrollend = (event) => {
// scroll ended
};
aScrollingElement.onscrollend = (event) => {
// scroll ended
};
填充和漸進增強
如果想立即參加這項新活動,請參考我們精心提供的建議。您可以繼續使用目前的捲動結束策略 (如果有),並在策略一開始時檢查支援情形:
'onscrollend' in window
// true, if available
這會根據瀏覽器是否提供事件回報 True 或 False。取代為 這項檢查,您可以分支程式碼:
if ('onscrollend' in window) {
document.onscrollend = callback
}
else {
document.onscroll = event => {
clearTimeout(window.scrollEndTimer)
window.scrollEndTimer = setTimeout(callback, 100)
}
}
這麼做是為了在 scrollend
事件可用時,逐步提升事件品質。您也可以
polyfill
(NPM) 是我努力不懈的傑出表現
瀏覽器可以:
import {scrollend} from "scrollyfills"
// then use scrollend as if it's existed this whole time
document.onscrollend = callback
系統會逐步強化 polyfill,以便使用瀏覽器內建的 scrollend
事件 (如果有的話)。如果無法使用,指令碼會監控指標事件和
捲動畫面,盡可能估算結束事件。
用途
建議您在捲動畫面時,避免進行運算量龐大的工作。這種做法可確保捲動功能無須佔用大量記憶體,
以持續提供流暢的使用體驗使用 scrollend
事件可提供最佳時間來呼叫並執行繁重的工作,因為捲動作業已停止。
scrollend
事件可用來觸發各種動作。常見的用途是將相關聯的 UI 元素與捲動停止的位置同步。例如:
- 與輪轉介面捲動位置和點指標同步。
- 同步處理圖片庫項目及其中繼資料。- 在使用者捲動至新分頁後擷取資料。
舉例來說,假設使用者滑動關閉電子郵件。使用者滑動完成後,您就可以根據他們捲動的目標執行動作。
您也可以在程式輔助或使用者之後,使用這個事件執行同步處理 捲動頁面,或記錄分析這類動作
以下是箭頭、點和焦點等多個元素需要根據捲動位置更新的最佳範例。觀看我在 YouTube 上打造輪轉介面的方式影片。此外,試試直播示範。
感謝 Mehdi Kazemi 的工程工作,以及 Robert Flack 提供 API 和實作指南。