首先,函数防抖和函数节流都是为了降低事件触发后回调函数执行的频率。
函数防抖是事件触发多次只执行一次(最后一次),新的事件触发会归零计时器并重新计时。比如一个事件触发后等待3秒再执行回调,在这3秒期间,如果事件重复触发,则计时器反复归零。
函数节流是限制在一段事件内回调只能执行一次,比如第一次触发事件,3秒后执行回调,那么在这3秒期间内,再次触发事件会被忽略,3秒一到,立刻执行回调。
实现:
// 防抖
function debounce(delay) {
let timer;
return () => {
clearTimeout(timer);
timer = setTimeout(() => {
// code
}, delay);
}
}
let eventFn_debounce = debounce(2000);
document.querySelecter('.button').addEventListener('mouseover', () => {
eventFn_debounce();
});
// 节流
function throttle(delay) {
let timer;
return () => {
if (timer) {
return;
}
timer = setTimeout(() => {
// code
timer = null;
}, delay);
}
}
let eventFn_throttle = throttle(2000);
document.querySelecter('.button2').addEventListener('mouseover', () => {
eventFn_throttle();
});