当前位置: 首页 > news >正文

一文大白话讲清楚防抖和节流,设计封装防抖和节流,以及防抖和节流的应用场景

文章目录

  • 一文大白话讲清楚防抖和节流,设计封装防抖和节流,以及防抖和节流的应用场景
  • 1. 防抖和节流的背景
  • 2. 节流
  • 3. 节流的应用场景
  • 4. 防抖
  • 5. 防抖应用场景

一文大白话讲清楚防抖和节流,设计封装防抖和节流,以及防抖和节流的应用场景

1. 防抖和节流的背景

  • 我们可能会遇到这么一种情况,你在页面上写了一个按钮,点一下这个按钮,就能刷新一下这个页面
  • 这时候有个哥们,他就想在想,如果我一直不停的点,会怎么样,于是他就以三十年单身的手速嘎嘎嘎嘎一直点。
  • 这时候你的页面就要不断地刷新,向服务器拉取资源,造成了极大的资源浪费。
  • 于是你就想,我有没有可能限制他一下,怎么限制呢,点还是让你点,不让你点你跟我急。
  • 但是你点完以后我执不执行,或者怎么执行,那就是我的事了。于是,我想出了两个办法。
  • 第一种办法,我设置一个时间段,这个时间段不管你点了多少次,我只执行你对后点的那一次,这样既不影响你点,我还能少执行。这就是节流
  • 第二种办法,我设置这么个逻辑,你点一下,我就让你当前的点击延迟N秒后再执行,如果你在延迟等待的时间里又点了一次,那就重新开始计时N秒再执行,直到有一次N秒倒计时结束了,那就执行。这就是防抖。

2. 节流

  • n秒内只运行一次,若在n秒内重复触发,只有一次生效
  • 设计封装一个节流器,上代码
<div><button id="button">click me</button>
</div><script>function throttled(fn,delay=2000){let timer=null;return function (...args){if(!timer){timer=setTimeout(()=>{fn.apply(this,args)timer=null;},delay)}}}function print(){console.log('节流')}document.getElementById('button').addEventListener('click',throttled(print,2000))
</script>

3. 节流的应用场景

  • 滚动加载,加载更多,滚动到底部监听
  • 搜索框联想

4. 防抖

  • n秒后执行该事件,若在n秒内被触发,则重新计时n秒
  • 设计封装一个防抖器,上代码
<div><button id="button">click me</button>
</div><script>function throttled(fn,delay=2000){let timer=null;return function (...args){clearTimeout(timer)timer=setTimeout(()=>{fn.apply(this,args)},delay)}}function print(){console.log('防抖')}document.getElementById('button').addEventListener('click',throttled(print,2000))
</script>

5. 防抖应用场景

  • 窗口发小resize
  • 表单校验等
http://www.lryc.cn/news/510334.html

相关文章:

  • Windows开启IIS后依然出现http error 503.the service is unavailable
  • C++的封装(十四):《设计模式》这本书
  • 牛客周赛73B:JAVA
  • 【Ubuntu 20.4安装截图软件 flameshot 】
  • 剑指Offer|LCR 014. 字符串的排列
  • 【Agent】Chatbot、Copilot与Agent如何帮助我们的提升效率?
  • QT笔记- QTreeView + QFileSystemModel 当前位置的保存与恢复 #选中 #保存当前索引
  • OpenResty开发环境搭建
  • linux提示结构需要清理
  • 【扩展卡尔曼滤波理论推导与实践】【理论】【2/3 公式推导】
  • springboot494基于java的综合小区管理系统(论文+源码)_kaic
  • 深度学习blog-Transformer-注意力机制和编码器解码器
  • 敏感词 v0.24.0 新特性支持标签分类,内置实现多种策略
  • 随身 WiFi 连接 X-Wrt 共享网络与 IPv6 中继配置
  • Keil-编译按钮Translate,Build,Rebuild
  • No.1免费开源ERP:Odoo自定义字段添加到配置页中的技术分享
  • Linux 更改Jenkins使用其他账户启动
  • wordpres当前分类调用父分类的名称和链接
  • TCP客户端模拟链接websocket服务端发送消息(二)
  • 操作系统之同步与互斥的基本概念
  • 详细讲解axios封装与api接口封装管理
  • API 接口如何确保数据的安全?
  • HAL库STM32硬件IIC驱动数字电位器MCP4017
  • 「地平线」副总裁余轶南与「理想汽车」智驾产品总监赵哲伦联手创业,入局具身智能赛道!
  • 弹性盒子(display: flex)布局超全讲解|Flex 布局教程
  • 无问社区-无问AI模型
  • 如何记录日常笔记
  • 【魅力golang】之-反射
  • git--批量修改本地用户名和邮箱
  • Rofin罗芬激光PowerLine L300 PL400 Manual 软件