防抖和节流都是函数执行的过于频繁,导致影响性能等情况下,控制函数执行频率的概念,下面我们分别解释一下防抖和节流的概念。
节流:(顾名思义,就像开闸放水一样),在固定的时间内执行一次函数;然后,在这个时间段内再收到执行该函数的命令也不在执行该函数,简单的说就是一段时间只执行一次函数。
//节流
function throttle(func, delay) {
let status = true
return function () {
if (!status ) {
return;
}
status = false;
setTimeout(() => {
func.apply(this, arguments);
status = true;
}, delay)
}
}
var box = document.getElementById('box');
box.onmousemove = throttle(function (e) {
console.log('节流');
}, 1000)
防抖:防抖的策略是在等待执行的时间内再次触发,则取消前一次触发,重新计时等待时间,直到在等待时间不在触发的时候才去执行函数(也就是最后一次执行后过了等待时间才触发函数,所以防抖有个问题就是如果一直频繁触发,那就看不到函数的执行)。
//防抖
function debounce(func, delay) {
let timer;
return function () {
clearTimeout(timer);
timer= setTimeout(() => {
func.apply(this, arguments);
}, delay)
}
}
var box1 = document.getElementById('box1');
box1.onmousemove = debounce(function (e) {
console.log('防抖');
}, 1000)