函数防抖节流

211 阅读1分钟

首先,函数防抖和函数节流都是为了降低事件触发后回调函数执行的频率。

函数防抖是事件触发多次只执行一次(最后一次),新的事件触发会归零计时器并重新计时。比如一个事件触发后等待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();
});