我正在努力為我的用戶創造最好的滾動體驗。當用戶向下滾動頁面時,我會創建粘性元素。我使用IntersectionObserver API來檢測元素何時在視口中。
但有一件事我不確定。我應該如何以最佳方式處理滾動事件?
我應該使用這樣的debounce
函數嗎:
const debounce = (func, wait, immediate) => {
let timeout;
return function () {
let context = this,
args = arguments;
let later = () => {
timeout = null;
if (!immediate)
func.apply(context, args);
};
let callNow = immediate && !timeout;
clearTimeout(timeout);
timeout = setTimeout(later, wait);
if (callNow)
func.apply(context, args);
};
}
window.addEventListener('scroll', debounce(() => {
// Run function
}, 150));
或者我應該像這樣使用passive: true
:
window.addEventListener('scroll', () => {
// Run function
}, {
passive: true
});
還是組合?
當您確信處理程序中永遠不需要preventDefault時,1-passive選項可以設置為true。
2-反跳的使用(通常意味著“僅在經過一段時間后才考慮排放值”)完全取決于用例,例如,在執行某些邏輯之前,反跳可以很好地滿足暫停排放的需要。