节流
创建一个“节流”装饰器 throttle(f, ms) —— 返回一个包装器。
当被多次调用时,它会在每 ms 毫秒最多将调用传递给 f 一次
function throttle(fn, time) {
let timeout = null,
saveArgs,
saveThis;
return function Wrap() {
if (timeout) {
saveArgs = arguments;
saveThis = this;
return;
}
fn.apply(this, arguments);
timeout = setTimeout(() => {
if (saveArgs) {
fn.apply(saveThis, saveArgs);
saveArgs = saveThis = null;
}
clearTimeout(timeout);
timeout = null;
}, time);
};
}
let fn = throttle(function (e) {
console.log(e, "执行");
}, 500);
document.addEventListener("mousemove", fn);
效果: