防抖和节流

2021-11-29  本文已影响0人  Mr老朝

1、防抖

短时间内多次触发,只会执行一次。比如:10秒内不间断快速触发一千次,也只是在触发结束后执行一次而已。

var timer; // 维护同一个timer
function debounce(fn, delay) {
    clearTimeout(timer);
    timer = setTimeout(function(){
        fn();
    }, delay);
}
function debounce(fn, delay) {
    var timer; // 维护一个 timer
    return function () {
        var _this = this; // 取debounce执行作用域的this
        var args = arguments;
        if (timer) {
            clearTimeout(timer);
        }
        timer = setTimeout(function () {
            fn.apply(_this, args); // 用apply指向调用debounce的对象,相当于_this.fn(args);
        }, delay);
    };
}

2、节流

每隔一段时间,只执行一次函数。比如:10秒内不间断快速触发一千次,节流设置每1秒执行一次,那么10秒内的一千次触发也只会执行10次;

function throttle(fn, delay) {
    var timer;
    return function () {
        var _this = this;
        var args = arguments;
        if (timer) {
            return;
        }
        timer = setTimeout(function () {
            fn.apply(_this, args);
            timer = null; // 在delay后执行完fn之后清空timer,此时timer为假,throttle触发可以进入计时器
        }, delay)
    }
}
上一篇 下一篇

猜你喜欢

热点阅读