美文网首页
防抖和节流

防抖和节流

作者: 爱学习的小青蛙 | 来源:发表于2019-05-31 18:07 被阅读0次

    https://www.cnblogs.com/shapeY/p/7773983.html
    防抖和节流

    function throttle(fn, interval = 300) {
        let canRun = true;
        return function () {
            if (!canRun) return;
            canRun = false;
            setTimeout(() => {
                fn.apply(this, arguments);
                canRun = true;
            }, interval);
        };
    }
    //一定时间间隔内只会执行一次任务
    //规定在一个单位时间内,只能触发一次函数。如果这个单位时间内触发多次函数,只有一次生效
    //函数的节流就是通过闭包保存一个标记(canRun = true),在函数的开头判断这个标记是否为 true,如果为 true 的话就继续执行函数,否则则 return 掉,判断完标记后立即把这个标记设为 false,然后把外部传入的函数的执行包在一个 setTimeout 中,最后在 setTimeout 执行完毕后再把标记设置为 true(这里很关键),表示可以执行下一次的循环了。当 setTimeout 还未执行的时候,canRun 这个标记始终为 false,在开头的判断中被 return 掉。
    
    function debounce(fn, interval = 300) {
        let timeout = null;
        return function () {
            clearTimeout(timeout);
            timeout = setTimeout(() => {
                fn.apply(this, arguments);
            }, interval);
        };
    }
    //任务频繁触发下,只有任务触发的间隔超过指定间隔,任务才会执行
    //在事件被触发n秒后再执行回调,如果在这n秒内又被触发,则重新计时。
    //通过闭包保存一个标记来保存 setTimeout 返回的值,每当用户输入的时候把前一个 setTimeout clear 掉,然后又创建一个新的 setTimeout,这样就能保证输入字符后的 interval 间隔内如果还有字符输入的话,就不会执行 fn 函数了。
    
    //很形象的比喻。节流防抖就好比乘电梯,比如delay是10秒,那么防抖就是电梯每进来一个人就要等10秒再运行,而节流就是电梯保证每10秒可以运行一次
    //它和防抖动最大的区别就是,节流函数不管事件触发有多频繁,都会保证在规定时间内一定会执行一次真正的事件处理函数。
    

    相关文章

      网友评论

          本文标题:防抖和节流

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