最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 适合新手:关于函数防抖与节流的理解

    正文概述 掘金(isDafei)   2021-02-27   523

    函数防抖的实现

    函数防抖,是指仅仅在设定的时间内只执行你的最后一下操作,之前的都会被清空。

    比如在输入框连续输入100个字符,那么就会利用变量是否为null进行100次的判断,

    如果变量不是null 就证明已经执行过一次并且将setTimeout赋值给了timeoute(此时非null),

    所以就会清空上一次的timeout,而本次点击的不会被清空,会在设定的时间后执行,

    如果在设定的时间内又再次触发了,那么就会继续清空上次的timeout,再等待本次的多少秒后执行, 这就是函数防抖的定义

      debounce(func,time){
        let timeout = null
        return function () {
          if (timeout) clearTimeout(timeout)
          timeout = setTimeout(() => {  // 判断是否为null 如果不为null 就证明已经执行过setTimeout 并进行了赋值,但是由于setTimeout 是延迟 执行所以还没真正执行里面的函数,而此时你又触发了并且判断timeout 已经不再是null,所以就会清空timeout
            func.call(this,arguments)
          }, time)
        }
      }
    

    函数节流的实现

    第一种方式:

    函数节流,是指仅仅在设定的时间内,不管是操作多少次,也只触发一次

    比如点击按钮,当你进行点击事件请求接口,首先声明变量存存储点击记录,如果,变量是null,证明没有被点击,那么就可以触发setTimeout并且存储到变量记录了点击,

    如果频繁的点击,那么因为变量存储了点击记录不为null,所以不会再次执行判断里的语句,而在定义的时间结束后,

    执行了上一次被记录的点击事件,此时变量已被赋值为null, 此时再次点击才会被重新记录,然后在定义的时间后再次执行,以此往复

        let timeout = null
        return function () {
          if(!timeout){
            timeout = setTimeout(()=>{
              func.call(this,arguments)
              timeout = null
            },time)
          }
        }
      }
    

    第二种方式:

    不再使用setTimeout 的延迟执行,而是利用当前执行时的时间(new Date.now())和上一次执行时间的相差值进行比较判断是否大于设定时间

    如果判断成立,再执行,判断不成立就不执行,和第一种的区别是判断的是时间差,而第一种是利用setTimeout 的延迟执行 进行变量的改变进行判断

    throttle(func,time){
        let per = 0 // 定义前一次时间用来进行比较用
        return function(){
          let now = Date.now() // 存储当前调用时间
          if(now - per > time){ // 判断当前调用时间减去上次调用时间的间隔大于 设定时间 即执行函数
            func.call(this,arguments)
            per = now // 记录当前调用时间
          }
        }
      }
    

    函数防抖和函数节流的区别(注意)

    函数防抖是让函数只可执行最后一次,所以使用setTimeout 必须要清除的,否则还是会被执行,

    函数节流是让函数在时间内只可执行一次,不是不让函数执行,所以使用setTimeout 实现 无需清除

    东西简单,第一次写,如有不对,请各位高抬贵手,给予纠错,谢谢!!!


    起源地下载网 » 适合新手:关于函数防抖与节流的理解

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元