美文网首页
js防抖函数

js防抖函数

作者: 廷裕同学 | 来源:发表于2024-08-18 09:29 被阅读0次

    为什么要做防抖?

    当我们监听用户操作时,用户操作过快,导致监听到函数重复调用。而前面的N次操作对于我们来讲又是无效的操作,只需要用户的最后一次操作。这时候就需要我们用防抖函数啦。

    防抖函数应用的基本原则

    防抖函数不是想用就用的,只有在一定条件下才适合用防抖函数!!!
    1. 请求的函数操作非常耗时,比如网路请求、复杂的计算等等... ...
    2. 该函数被频繁的触发,但墙面的触发对于程序而言毫无意义,只有最后一次触发才有意义
    在遵循了以上俩原则的基础上我们就可以运用防抖函数解决问题啦!
    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>防抖</title>
    </head>
    
    <body>
        <input type="text" />
        <script>
            // 防抖函数
            function debounce (fn, duration) {
                var timerId = null;
                return function () {
                    if (timerId) {
                        clearTimeout(timerId);
                        timerId = null;
                    }
                    // 将该函数的this传递给fn
                    var that = this;
                    // 将该行数的参数全部传递给fn
                    var args = Array.prototype.slice.call(arguments, 0);
                    timerId = setTimeout(() => {
                        fn.apply(that, args);
                    }, duration);
                }
            }
            var iptHandler = debounce(function (e) {
                console.log( e, this.value, '耗时操作');
            }, 1000);
    
            var ipt = document.querySelector("input");
            ipt.addEventListener('keyup', iptHandler);
    
            var mouseHandler = debounce(function () {
                console.log('鼠标移动了');
            }, 1000)
    
            window.addEventListener('mousemove', mouseHandler);
        </script>
    </body>
    
    </html>
    

    相关文章

      网友评论

          本文标题:js防抖函数

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