美文网首页
js实现防抖函数

js实现防抖函数

作者: zhao_ran | 来源:发表于2020-09-02 12:00 被阅读0次

    函数防抖

    当持续触发事件时,一定时间段内没有再触发事件,事件处理函数才会执行一次,如果设定时间到来之前,又触发了事件,就重新开始延时。也就是说当一个用户一直触发这个函数,且每次触发函数的间隔小于既定时间,那么防抖的情况下只会执行一次。

    上代码

    // HTML部分
    <body>
        <textarea name="" id="textarea" cols="30" rows="10">
        </textarea>
    </body>
    
    //script部分
    <script>
        var textarea = document.getElementById('textarea')
        textarea.addEventListener('keydown', debounce(ajaxAction, 500))
        function ajaxAction() {
            console.log('可以发送ajax请求')
        }
        function debounce(fn, delay) {
            var timer = null; // 声明计时器
            return function () {
                var context = this;
                var args = arguments;
                clearTimeout(timer);
                timer = setTimeout(function () {
                    fn.apply(context, args)
                }, delay);
            };
        }
    </script>
    

    函数节流-封装

    /* 
            用来返回节流函数的工具函数
        */
        function throttle(callback, delay) {
          let pre = 0 // 默认值不要是Date.now() ==> 第1次事件立即调用
          return function (event) { // 节流函数/真正的事件回调函数   this是发生事件的标签
            const current = Date.now()
            if (current - pre > delay) { // 只有离上一次调用callback的时间差大于delay
              // 调用真正处理事件的函数, this是事件源, 参数是event
              callback.call(this, event)
              // 记录此次调用的时间
              pre = current
            }
          }
        }
        // 使用封装的节流函数
        document.addEventListener('scroll',throttle(function() {
          console.log('这是带有大量计算的函数')
        },2000))
    

    相关文章

      网友评论

          本文标题:js实现防抖函数

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