防抖和节流函数算是非常基础的工具函数了,说一下个人的简单理解:
-
防抖:用户操作会在一定等待一段时间后执行function,如果用户在等待时间范围内重复操作,则重新计算等待时间(相当于有施法前摇时间,如果你重复释放技能,则技能前摇重新计算。)
-
节流:用户频繁操作下,function必须经过一定的时间间隔后才会执行,如每10秒才可以执行一次。相当于有冷却时间的function
具体实现:
防抖:
function debounce(fn, wait) {
var timer = null;
return function() {
// 如果此时存在定时器的话,则取消之前的定时器重新记时
if (timer) {
clearTimeout(timer);
timer = null;
}
// 设置定时器,使事件间隔指定事件后执行
timer = setTimeout(() => {
fn.apply(this, arguments);
}, wait);
};
}
节流
function throttle(fn, delay) {
var preTime = Date.now();
return function() {
var nowTime = Date.now();
// 两次时间间隔超过了指定时间的话,则执行函数。
if (nowTime - preTime >= delay) {
preTime = Date.now();
return fn.apply(this, arguments);
}
};
}