首页 > Web开发 > 详细

js的节流与防抖

时间:2021-08-26 00:04:16      阅读:13      评论:0      收藏:0      [点我收藏+]
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)
        }
    }
}

 

js的节流与防抖

原文:https://www.cnblogs.com/fxlsoft/p/15186392.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!