js的节流与防抖

1、函数防抖: 在事件被触发 n 秒后再执行回调,如果在这 n 秒内事件又被触发,则重新计时。 2、函数节流: 规定一个单位时间,在这个单位时间内,只能有一次触发事件的回调函数执行,如果在同一个单位时间内某事件被触发多次,只有一次能生效。   函数防抖的实现
// 防抖函数实现
function debounce(fn, delay = 200) {
    let timer = null;
    return function () {
        let context = this;
        let args = arguments;
        // 如果此时存在定时器的话,择取消之前的定时器重新计时
        if (timer) {
            clearTimeout(timer);
        }
        timer = setTimeout(() => {
            // 执行函数
            fn.apply(context, args);
            timer = null;
        }, delay);
    }
}
节流函数的实现
// 函数节流的实现
function throttle(fn, delay = 200) {
    let preTime = null;
    return function() {
        let context = this;
        let args = arguments;
        let now = Date.now();
        if (fn._timer) {
            clearTimeout(fn._timer);
            delete fn._timer;
        }
        let gapTime = now - preTime;
        // 如果时间间隔大于或等于规定的间隔时间,那么就执行
        if (preTime && gapTime >= delay) {
            preTime = now;
            return fn.apply(context, args);
        }
        // 否则启动计时器,保证在间隔时间的最后一刻能执行
        else {
            fn._timer = setTimeout(() => {
                preTime = now;
                delete fn._timer;
                fn.apply(context, args);
            }, delay - gapTime)
        }
    }
}

 

上一篇:C#中的Task.Delay()和Thread.Sleep()区别


下一篇:单片机:按键控制源代码