节流:函数在一段时间内的多次调用,仅第一次有效。
节流就像是一个看门大爷,每一段时间它只会放一个人进去
- 时间戳版
function throttle(func, delay) {
var last = 0;
return function () {
var now = Date.now();
if (now >= delay + last) {
func.apply(this, arguments);
last = now;
} else {
console.log("距离上次调用的时间差不满足要求哦");
}
}
}
- 定时器版
function throttle(func, delay) {
var timer = null;
return function () {
if (!timer) {
func.apply(this, arguments);
timer = setTimeout(() => {
timer = null;
}, delay);
} else {
console.log("上一个定时器尚未完成");
}
}
}
防抖:函数在一段时间内的多次调用,仅使得最后一次调用有效。
防抖就像一直喝酒的大爷,酒醒了才能去看门 , 一直喝永远看不了门,等你不喝了,过段时间酒醒了,再去看门
1.定时器版
function debounce(fn,delay){
let timer = null //借助闭包
return function() {
if(timer){
clearTimeout(timer) // 重新开始计时
}
timer = setTimeout(fn,delay)
}
}