美文网首页
防抖和节流

防抖和节流

作者: Mr老朝 | 来源:发表于2021-11-29 16:14 被阅读0次

    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)
        }
    }
    

    相关文章

      网友评论

          本文标题:防抖和节流

          本文链接:https://www.haomeiwen.com/subject/uhdlxrtx.html