防抖(debounce)
概念
在第一次触发事件时,不立即执行函数,而是给出一个期限值 如果在期限值内没有再次触发滚动事件,那么就执行函数 如果在期限值内再次触发滚动事件,那么当前的计时取消,重新开始计时
function debounce(func, time) {
let timer = null;
return () => {
clearTimeout(timer);
timer = setTimeout(() => {
func.apply(this, arguments);
}, time);
};
}
### 节流(throttle) #### 概念 定期开放的函数,也就是让函数执行一次后,在某个时间段内暂时失效,过了这段时间后再重新激活
function throtte(func, time=1000) {
let activeTime = 0;
return () => {
const current = Date.now();
if (current - activeTime > time) {
func.apply(this, arguments);
activeTime = Date.now();
}
};
}