首页 > 其他分享 >js实现防抖(debounce)与节流(throttle)

js实现防抖(debounce)与节流(throttle)

时间:2023-04-23 10:23:31浏览次数:57  
标签:触发 防抖 throttle 周期 debounce 1s 事件 节流

防抖(debounce)

一句话概括:防抖是给定一个时间周期,如果触发事件的周期小于该事件(也就是触发过快),则不会触发事件。
举个例子:我给定的时间周期是1s,如果我在触发第一次事件后1s内触发该事件,则重新开始计时,直到触发周期大于1s才会执行事件的方法。

function debounce(fn,timeout){
    let timer = null
    return function(){
        clearTimeout(timer)
        timer = setTimeout(() => {
            fn.apply(window,arguments)
        }, timeout);
    }
}

一句话概括:节流是给定一个时间周期,然后对频率大的触发进行削峰,如果触发事件的周期大于该事件(也就是触发过快),则会触发事件的周期限定在给定的周期内,如果小于则按照正常的时间触发。
举个例子:我给定的时间周期是1s,如果我在触发第一次事件后连续0.5s内触发该事件,那触发周期会变成每间隔1s执行事件。

节流(throttle)

function throttle(fn,timeout){
    let flag = true
    return function(){
        if(flag){
            setTimeout(() => {
                fn.apply(this,arguments)
                flag = true
            }, timeout);
        }
        flag = false
    }
}

其他应用场景举例

讲完了这两个技巧,下面介绍一下平时开发中常遇到的场景:

  1. 搜索框input事件,例如要支持输入实时搜索可以使用节流方案(间隔一段时间就必须查询相关内容),或者实现输入间隔大于某个值(如500ms),就当做用户输入完成,然后开始搜索,具体使用哪种方案要看业务需求。
  2. 页面resize事件,常见于需要做页面适配的时候。需要根据最终呈现的页面情况进行dom渲染(这种情形一般是使用防抖,因为只需要判断最后一次的变化情况)

第三方实现

如果自己不愿意封装,可以用第三方实现,比如lodash

标签:触发,防抖,throttle,周期,debounce,1s,事件,节流
From: https://www.cnblogs.com/shinebay/p/17345692.html

相关文章

  • js-防抖和节流的区别及实现
    函数防抖(debounce):触发高频事件后n秒内函数只会执行一次,如果n秒内高频事件再次被触发,则重新计算时间。函数节流(throttle):高频事件触发,但在n秒内只会执行一次,所以节流会稀释函数的执行频率。函数节流(throttle)与函数防抖(debounce)都是为了限制函数的执行频次,以优化函数触发频率过......
  • 函数防抖
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><metaname="viewport"content="width=d......
  • JS中的函数防抖
    一、什么是函数防抖概念:函数防抖(debounce),就是指触发事件后,在n秒内函数只能执行一次,如果触发事件后在n秒内又触发了事件,则会重新计算函数延执行时间。举个栗子,坐电梯的时候,如果电梯检测到有人进来(触发事件),就会多等待10秒,此时如果又有人进来(10秒之内重复触发事件),那么电梯就......
  • 手写防抖节流函数
    防抖函数functiondebounce(fn,t){  lettimeId  returnfunction(){//如果有定时器就清除  if(timeId)clearTimeout(timeId)//开启定时器200  timeId=setTimeout(function(){   fn()  },t) }}//节流函数throttlefunctionth......
  • 第二篇 手写原理代码 - 函数【 函数防抖 、函数节流 】
    函数防抖和函数节流都是优化高频事件处理的JavaScript技术。它们可以限制函数的调用,在一定程度上减少计算、网络请求和提高响应速度,但它们的实现方式略有不同函数防抖:延迟执行函数,只有在事件停止后才会执行最后一次事件函数节流:定期执行函数,每隔一段时间执行一次通常情况下,......
  • js优化(防抖和节流)
    ......
  • 记录--Vue 3 中的极致防抖/节流(含常见方式防抖/节流)
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助今天给大家带来的是Vue3中的极致防抖/节流(含常见方式防抖/节流)这篇文章,文章中不仅会讲述原来使用的防抖......
  • js - 稀释、防抖、节流 - 概念关系
    1.防抖期望:同一时间或者同一时间前后指定范围内【如1秒内】如果没有更多的操作,多次调一个函数时,希望只调一次函数实现:使用定时器,指定时间内更新定时器计时时长,直到为0......
  • 防抖与节流
    防抖:前面的所有触发都被取消,最后一次执行在规定的时间之后才会触发,也就是说如果连续的快速触发,只会执行一次节流:在规定的间隔时间范围内不会重复的触发回调,只有大于这个时......
  • 防抖与节流
    1、什么是防抖防抖策略(debounce)是当事件被触发后,延迟n秒后再执行回调,如果在这n秒内事件又被触发,则重新计时。  2、防抖的应用场景:用户在输入框中连续输入一串字符时......