JavaScript

防抖和节流(自己的理解)

2020-03-31  本文已影响0人  blank的小粉er

防抖是指连续触发的时候只会执行一次,停止触发 N 秒后才能继续执行,而节流是指如果你持续触发事件,每隔一段时间,只执行一次事件。像防止按钮多次点击就用防抖,像是监听滚动事件就用节流。

防抖场景

节流场景

区别

    <div id="box"></div>
    <br>
    <button id="btn">测试</button>

    <script>
        // 防抖
        var timer;
        box.onmousemove = function () {
            clearTimeout(timer)
            timer = setTimeout(function () {
                console.log("1")
            }, 1000);
        }

        //节流
        var lastTime = 0;
        btn.onclick = function () {
            var nowTime = new Date().getTime();
            if (nowTime - lastTime > 1000) {
                console.log("2")
                lastTime = nowTime;
            }
        }
    </script>

封装防抖

    var myApp=fangdou(add,1000)
        
        box.onmousemove = event=>{
            myApp(event.clientX,20)
        }

        function add(a, b) {
            console.log(a + b)
        }
        function fangdou(fn, time) {
            var timer;
        
            return function () {
                clearTimeout(timer)
                var arg=arguments;
                timer = setTimeout(function () {                
                    fn.apply(this, arg)             
                }, time);
            }

        }
上一篇下一篇

猜你喜欢

热点阅读