防抖 vue

防抖: 触发高频事件后n秒内只执行一次,如果n秒内再次触发就会重新计算时间。

按钮

 function showTop() {

        var scrollTop =

            document.body.scrollTop || document.documentElement.scrollTop;

        console.log('你停下了  我要计时喽开始打印了666666666666');

    }

    /* 防抖 */

    function debounce(fn, delay) {

        let timer = null; //借助闭包

        return function() {

            if (timer) {

                console.log('清除上一个旧的计时器');

                clearTimeout(timer);

            }

            console.log('设置了新计时器');

            timer = setTimeout(fn, delay); // 简化写法

        };

    }

    // window.onscroll = debounce(showTop, 3000);

    var btn1 = document.getElementById('buton');

    btn1.addEventListener('click', debounce(showTop, 2000));

防抖 就是相当于,某偶一个点击事件。。。第一次点击以后,闭包中的变量timer 为空,,直接进到计时器中,等待时间(比如等待5秒),并执行即时任务,而且生成了一个计时器的唯一标识,存在了timer中,如果在五秒之内,没有再次触发点击事件,,那就等待五秒后,执行定时器中打印函数就可以了,如果在五秒内再去触发一次点击事件,进到函数中以后,读到了timer是有值的(上一个定时器生成存进去的),所以进到判断中,把第一个定时器的清除了,并且并且重新计算五秒,并且到五秒以后,执行定时器中的函数,又生成了新的一个定时器的唯一标识,,如果在新的五秒之内,又在点击了事件,又会重新进到函数中,读取到第二次中新的定时器的唯一标识,并且清除了定时器,,,又生成第三个定时器的唯一标识,并重新计算五秒,,依次这样子执行,,直到最后一次点击事件(后面五秒之内没有点击事件了),读取到上一次时器的唯一标识,并且清除了,并且生成新的定时器唯一标识,重新等待五秒,准备执行计时器中的函数(也就是打印函数)

应用场景, 就是搜索框中,一直在输入字,那就不执行函数(如果不防抖,一直输入一直执行搜索函数,那很消耗性能),等待不输入字以后,五秒后, 进行执行 搜索 函数,,(也就是搜索),


版权声明:本文为qq_40214451原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。