冬天来了记得“防抖“,还有节流

为什么

我们在对浏览器窗口进行resize,scroll,输入框内容校验等操作的时候,如果事件处理函数的调用没有限制,这样会加重浏览器的负担,导致用户的体验感也非常不好,所以就需要我们对事件处理函数的抵用加以限制,就可以使用debounce(防抖)和throttle(节流)来处

1.防抖  

概念:当持续触发事件时,一定时间段内没有再触发事件,事件处理函数才执行一次,如果在这个时间段内重新触发了函数,则重新计时

           : 在盒子里面添加一个鼠标移动事件, 当鼠标移动时给盒子的数字加一, 如果我们不加一个定时器进行显示,只要鼠标轻微的移动 里面的数字就会加一,会发现数字加的非常的快.所以添加debounce函数,在设置的2秒内没有进行鼠标的移动才输出数字

  <script>
    // 学习防抖
    const boxDom = document.querySelector('.box')

    let count = 1;

    function mousemove() {
      count++
      boxDom.innerHTML = count
    }

    function debounce(fn, time) {
      let timerId
      return function () {
        //下一次滑动开始 要先将之前的定时器清除
        clearTimeout(timerId)

        //定时器里面的函数需要2s之后才执行
        //如果2s 又滑动我们的鼠标 就会进入函数 首先清空上一次的定时器
        //只有当两次滑动的间隔大于2s 定时器里面的回调函数才会执行
        timerId = setTimeout(function () {
          fn()
        }, time)
      }

    }
    boxDom.addEventListener('mousemove', debounce(mousemove, 2000))
  </script>

3 节流   

当持续触发事件时,保证一定时间段内只调用一次事件处理函数.如下代码所示:

持续触发事件时,并不立即执行函数,每隔1秒才执行一次

<script>
    function throttle(fun,deplay){
     const prev=Date.now()
     return function(){
      const context=this;
      const args=arguments
      const now=Date.now()
      if(now-prev>=deplay){
        fun.apply(context,args)
        prev=Date.now()
      }
     }
    }
    function handle(){
      console.log(Math.random());
      window.addEventListener('scroll',throttle(handle,1000))
    }
  </script>

3 总结 

函数防抖:将几次操作合并为一次操作进行,原理是维护一个计时器,规定在延迟时间后触发函数,但是在延迟事件内再次触发的话,就会取消之前的计时器重新设置,只有最后一次操作才会被触发

节流:一定时间内只执行一次函数,原理是通过判断是够达到一定时间来触发

区别:都减少了浏览器了操作负担,防抖是只有最后一次事件后才触发函数
         节流:在规定的时间内只真正的执行一次函数

防抖一般运用在在搜索框用户进行搜索的时候,根据用户的间隔时间联想出相应的内容,

节流:鼠标的点击触发以及页面的滚动事件.

                                

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值