// 使用场景:防止狂点
function debounce(fn,delay=500){
// 使用vue的话, debounce.timer 换成 this.timer
debounce.timer && clearTimeout(debounce.timer) ;
debounce.timer = setTimeout(()=>{
// fn....
debounce.timer = null
},delay)
}
throttle (func, delay) {
let timer = null;
let startTime = Date.now();
return function() {
const curTime = Date.now();
const remaining = delay - (curTime - startTime);
timer && clearTimeout(timer);
//使用场景 window.addEventListener('scroll', throttle(fn, 1000));
//添加事件一段时间不滚动,remaining < 0保证了第一次触发事件就能立即执行事件处理函数
if (remaining <= 0) {
func.apply(this, arguments);
startTime = Date.now();
} else {
timer = setTimeout(func, remaining);
}
}
}