封装防抖与节流函数

什么是防抖?

防抖

防抖是指在触发事件后,等待一段时间后执行函数。如果在等待时间内又触发了该事件,则重新计时。这样可以避免在短时间内多次触发同一事件导致函数被频繁执行。也就是多次触发以最后一次为准

常见的应用场景包括输入框输入时的搜索建议、窗口调整大小时的重新计算布局等。

        function debounce(fn,tm){//第一个参数是要进行防抖的代码,第二个参数是防抖时间单位毫秒
            let time//延时器变量
            return function(e){//如果不需要事件对象,可以不传参数
                if(time) clearTimeout(time)
                time=setTimeout((e)=>{fn(e)},tm)
            }
        }

怎么使用呢?

这是鼠标在div上滑动,让div里的数字自增的事件

        const div=document.querySelector("div")//获取div
        div.addEventListener("mousemove",debounce(mouse,500))//添加防抖事件
        function mouse(){div.innerHTML++}//触发事件要执行的代码

什么是节流?

节流

节流是指在一定时间间隔内最多执行一次函数。无论事件触发多频繁,只有在指定的时间间隔过去后才会执行函数。这样可以限制函数的执行频率,避免过多的计算和渲染。也就是多次触发,以指定的时间只能执行一次

常见的应用场景包括滚动事件的处理、鼠标移动事件的处理等。

     function throttle(fn,tm){
      let flag=true
      return function(){//如果需要事件对象,要传参数
        if(flag){
          flag=false
          fn()//如果需要事件对象,要传参数
          setTimeout(function(){flag=true},tm)//如果需要事件对象,要传参数
        }
      }
    }

使用方法与防抖一致

思路

防抖与节流都是运用了延时器

写防抖的逻辑是:事件触发后先声明一个变量用来存延时器,再判断有没有这个延时器,如果有就清除这个延时器,如果没有就创造一个延时器赋值给这个变量。这样当频繁触发事件时,就会一直清掉延时器,当不再触发事件后,延时器不再被清除,就会执行延时器里的代码

写节流的逻辑是:事件触发后先声明一个开关变量,事件触发后运行绑定事件的代码,随即把开关关掉,然后延时器里设定一个时间再开启开关。这样当频繁触发事件,不管触发多少次,延时器里面不把开关打开就不会执行事件处理代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值