美文网首页功能模块
函数防抖与函数节流(throttle与debounce )

函数防抖与函数节流(throttle与debounce )

作者: 千茉紫依 | 来源:发表于2019-04-01 16:07 被阅读0次
    函数节流throttle

    多用于具有倒计时功能的按钮,当点击发送按钮后,开始进行倒计时,这期间无法发送,当倒计时结束后,可再次发送

    常规写法:为函数添加_timer, 在发送后进行倒计时,倒计时结束后清除_timer,期间所有请求全部 return false

               const throttle= (fn, duration) => {
                    let that = this;
                    if (this._timer) {
                        return false;
                    } else {
                        this._timer = setTimeout(() => {
                            that._timer=null
                        }, duration);
                       return  fn();
                    }
                };
    

    闭包写法:思路一致,但是返回的是函数

              const throttle= (fn, duration) => {
                    let timer = null;
                    let fns = () => {
                        if (timer) {
                            return false;
                        } else {
                            timer = setTimeout(() => {
                                timer = null;
                            }, duration);
                            return fn();
                        }
                    };
                    return fns;
                };
    
    函数节流debounce

    多用于搜索框,当你疯狂、高频地点击,这个函数最后只会被执行一次。

    常规写法:为函数添加_timer, 每次点击都先清除之前的_timer,然后重新设定定时器,以确保fn只执行一次

           const debounce = (fn, duration) => {
               clearTimeout(this._timer)
               this._timer = setTimeout(fn,duration);
           };
    

    闭包写法:思路一致,但是返回的是函数

    const debounce = (fn, duration) => {
          let timer = null
          let fns = () => {
            clearTimeout(timer)
            timer = setTimeout(fn,duration)
          }
         return fns
    }
    

    相关文章

      网友评论

        本文标题:函数防抖与函数节流(throttle与debounce )

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