还不会防抖和节流?看这篇就足够了

简介: 还不会防抖和节流?看这篇就足够了

小嘟叨叨时刻


在写文章的过程中小嘟感觉还是蛮有意思的,感觉将`知识写出来,分享给读者,自己还蛮有成就感的。

小嘟的水平不高,所以大神们可以绕过,我的目的是帮助初学者和小白的。

临近考试,但是学习永远在路上,故此,小嘟为自己12月立个flag,

分享 >=10 篇文章

做>=10 道算法题

重新学习es6并做好笔记

我是小嘟,一个爱叨叨的学习者...

本文中心

  • 防抖和节流的概念
  • 防抖节流的代码实现
  • 防抖节流的实际应用
  • :以下代码用到了一些es6中的语法,例如 ...默认赋值箭头函数。(小嘟在底部已经放好了相应的链接,请读者查阅,嘿嘿嘿)


第一部分(防抖篇)

防抖的概念
  • 定义:事件发生后会在指定的n秒后触发回调函数,如果在这n秒内再次触发事件,那么将会重新计时。
  • 什么意思呢?
  • 容小嘟给读者举个例子,
  • 假设:(1)事件:点击事件 (2)n:10

这个假设讲的就是在点击事件发生后,会在10s后执行回调函数,如果在这10s内又触发点击事件,那么将会以这次点击的时间为基准,在此时间上再过10s才会执行回调函数。

总结:点击多次,只会以最后一次的点击为有效点击。这个小嘟感觉和咱们高考有点类似,高考之前的考试都算演习,对我们来说都是无效的,考好了、考砸了其实也没啥,只有真正高考的考试才是最重要的(嘿嘿嘿,可能不是很具体,但是小嘟想说的意思表达出来啦)。

下来就直接看实现呗

防抖的实现

const deBounce = (fn,delay=60000,...values)=>{
     let timer = null;
     return ()=>{
         if(timer){
             console.log("我的参考时间被更新了,呜呜呜!");
             console.log("以我这次的点击时间为准:",Date())
             clearTimeout(timer);
         }
         timer = setTimeout(()=>{
             fn.apply(this,values);
         },delay)
     }
 }
 const sayDebounce = (...canshu)=>{
       console.log(canshu);
       console.log("我是防抖,你猜我防住了吗?",Date())
 }
 let testDebounce = document.querySelector('#btn')
testDebounce.onclick = deBounce(sayDebounce,5000,{"ages":123},1,2,3,555,"0000");
代码运行截图

防抖的应用场景


  • 1.搜索框搜索输入。
    即在用户停止输入一段小时间后才会发送请求,如果在这一小段时间用户继续输入则重新计时。
  • 2.窗口大小调节。
    窗口调整完成后一小段时间进行渲染,如果在这一小段时间内又进行了调整,则重新计时,直到计时结束进行渲染。


第二部分(节流篇)

节流的概念

定义:事件发生后会在一段时间间隔后执行回调函数,在该间隔内,触发事件被认为是无效的。

什么意思呢?请读者容小嘟慢慢道来。

假设:(1)事件:点击事件 (2)时间间隔:10s

假设我们这个事件是点击事件,时间间隔是10s,我们首次点击按钮,会触发一个回调函数,该回调函数会在10s之后执行,在这10s内的所有点击操作都被视为无效,也就是你点你的,我不理睬(鸟)你。这个就有点像王者荣耀里边的技能一样,你释放技能它有一个冷却时间,冷却时间也就是我们这里说的一段时间间隔,在冷却时间内,你再点击,它是不会再次释放技能的(除非王者出现bug或者冷却时间为0。这种都是小概率事件,由概率知识知,小概率事件也可以被认为是不可能事件😂😂😂)

节流的实现

const throttle = (fn,delay = 60000,...rest)=>{
      let timer = null;
      return ()=>{
          if(timer) {
              console.log("你来了就来了呗,我不理你",Date());
              return ;
          }
          console.log("我是第一次进来的",Date());
          timer = setTimeout(()=>{
              fn.apply(this,rest);
          },delay)
     }
}
const sayThrottle = (...ret)=>{
      console.log(ret);
      console.log("我真的节流了吗?确实节流了",Date());
}
let testThrottle = document.querySelector("#btn01");
testThrottle.onclick= throttle(sayThrottle,5000,{"name":"dream"},"小嘟","小囔");
代码运行截图

节流的应用场景
  • 1.高频点击提交,表单重复提交
  • 2.懒加载时要监听计算滚动条的位置,但不必每次滑动都触发,可以降低计算的频率
  • 3.做商品预览图的放大镜效果时,不必每次鼠标移动都计算
相关文章
|
22天前
|
前端开发 JavaScript UED
【专栏】前端开发中,为解决用户操作引发的性能问题,常使用debounce(防抖)和throttle(节流)技术
【4月更文挑战第29天】前端开发中,为解决用户操作引发的性能问题,常使用debounce(防抖)和throttle(节流)技术。Debounce确保在一段时间内只执行最后一次事件触发的操作,减少不必要的执行,但有滞后性,适合搜索框实时搜索。Throttle则保证一定时间间隔内函数执行一次,保持固定频率,适用于滚动事件处理和窗口大小调整。两者可借助JavaScript或第三方库实现,需根据场景和需求选择并调整。正确使用能提升应用性能和用户体验。
|
22天前
|
前端开发 JavaScript UED
节流防抖:提升前端性能的秘密武器(下)
节流防抖:提升前端性能的秘密武器(下)
节流防抖:提升前端性能的秘密武器(下)
|
22天前
|
前端开发 JavaScript UED
节流防抖:提升前端性能的秘密武器(上)
节流防抖:提升前端性能的秘密武器(上)
|
22天前
|
人工智能 前端开发 Cloud Native
你能手撕节流防抖吗?
你能手撕节流防抖吗?
|
22天前
|
前端开发
【前端学习】—函数节流(九)
【前端学习】—函数节流(九)
|
8月前
|
前端开发
前端性能优化之防抖&节流
前端性能优化之防抖&节流
41 0
|
9月前
|
监控 前端开发
前端经典面试题 | 理解 节流 和 防抖(后附手写节流\防抖)
前端经典面试题 | 理解 节流 和 防抖(后附手写节流\防抖)
|
10月前
|
UED
防抖和节流怎么做
防抖和节流都是为了控制代码执行频率,提高性能和用户体验。
23 0
面试官:防抖和节流的区别是啥?实现一个防抖和节流函数(二)
面试官:防抖和节流的区别是啥?实现一个防抖和节流函数(二)
|
10月前
节流与防抖(附代码)
节流与防抖(附代码)
56 0

热门文章

最新文章