防抖函数
防抖是一种技术,用于限制函数被调用的次数。该函数只会在自上次调用以来经过特定的时间后被调用一次。
为了实现这一点,我们可以使用定时器来人为地创建必要的延迟。每次调用防抖函数时,我们需要使用clearTimeout()
来清除当前挂起的定时器。然后,我们必须使用setTimeout()
来创建一个新的定时器,延迟调用函数,直到至少经过ms
毫秒。最后,使用Function.prototype.apply()
,我们可以将this
上下文应用于函数,并提供必要的参数。
const debounce = (fn, ms = 0) => {
let timeoutId;
return function(...args) {
clearTimeout(timeoutId);
timeoutId = setTimeout(() => fn.apply(this, args), ms);
};
};
window.addEventListener(
'resize',
debounce(() => {
console.log(window.innerWidth);
console.log(window.innerHeight);
}, 250)
); // 最多每250毫秒记录一次窗口尺寸