throttle [风门]
[用中文]创 建一个节流功能,该功能仅调用每个“等待”毫秒
使用 setTimeout()
和 clearTimeout()
为了限制给定的方法, fn
.
使用 Function.prototype.apply()
应用 this
功能的上下文并提供必要的 arguments
.
使用 Date.now()
为了跟踪上次调用节流功能的时间。
省略第二个论点, wait
, 将超时设置为默认值为 0 ms。
typescript
const throttle = (fn: Function, wait: number = 300) => {
let inThrottle: boolean,
lastFn: ReturnType<typeof setTimeout>,
lastTime: number;
return function (this: any) {
const context = this,
args = arguments;
if (!inThrottle) {
fn.apply(context, args);
lastTime = Date.now();
inThrottle = true;
} else {
clearTimeout(lastFn);
lastFn = setTimeout(() => {
if (Date.now() - lastTime >= wait) {
fn.apply(context, args);
lastTime = Date.now();
}
}, Math.max(wait - (Date.now() - lastTime), 0));
}
};
};
typescript
window.addEventListener(
"resize",
throttle(function (evt) {
console.log(window.innerWidth);
console.log(window.innerHeight);
}, 250)
); // Will log the window dimensions at most every 250ms