美文网首页功能模块
函数防抖与函数节流(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