跳到主要内容

throttle [风门]

TS JS Deno

[用中文]创建一个节流功能,该功能仅调用每个“等待”毫秒

使用 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