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

使用lodash库实现防抖和节流

在 JavaScript 中,lodash 是一个非常流行的实用工具库,提供了许多常用的函数,其中就包括防抖节流的实现。lodash 提供的 debouncethrottle 函数可以让我们更方便地实现这两种功能。

1. 使用 lodashdebounce(防抖)函数

lodashdebounce 函数可以帮助我们在用户停止操作一段时间后才触发事件。它的使用方式非常简洁。

示例:搜索框输入防抖

在这个示例中,我们希望用户在输入框中停止输入 500 毫秒后才执行搜索操作,避免频繁请求。

<input type="text" id="search" placeholder="Search..."><script src="https://cdn.jsdelivr.net/npm/lodash@4.17.21/lodash.min.js"></script>
<script>// 假设这是一个执行搜索操作的函数function performSearch(query) {console.log('Searching for:', query);// 这里可以发送 ajax 请求进行搜索}// 使用 lodash 的 debounce 函数const debouncedSearch = _.debounce(function(event) {performSearch(event.target.value);}, 500);  // 500ms 的防抖时间// 监听输入框的输入事件document.getElementById('search').addEventListener('input', debouncedSearch);
</script>
  • 解释
    • 当用户输入时,debouncedSearch 函数会被连续调用,但只有当用户停止输入超过 500 毫秒时,performSearch 函数才会执行一次。
    • 防止在每次键盘输入时都发起请求,优化了性能。

2. 使用 lodashthrottle(节流)函数

lodashthrottle 函数允许我们在规定的时间间隔内最多执行一次事件处理函数,即使在这段时间内事件被多次触发。

示例:滚动事件节流

在这个示例中,我们希望当用户滚动页面时,每隔 1 秒才记录一次滚动事件,避免频繁触发回调函数。

<div style="height: 2000px;">Scroll down to see the effect</div><script src="https://cdn.jsdelivr.net/npm/lodash@4.17.21/lodash.min.js"></script>
<script>// 这是一个处理滚动事件的函数function handleScroll() {console.log('Scroll event detected at:', new Date().toLocaleTimeString());}// 使用 lodash 的 throttle 函数,每隔 1 秒最多触发一次const throttledScroll = _.throttle(handleScroll, 1000);// 监听滚动事件window.addEventListener('scroll', throttledScroll);
</script>
  • 解释
    • 当用户滚动页面时,throttledScroll 函数会在 1 秒内最多触发一次,避免滚动时回调函数被频繁调用。
    • 这优化了页面滚动的性能,特别是在回调函数较为复杂时。

3. 防抖和节流的高级用法

lodashdebouncethrottle 函数还支持一些高级选项,可以灵活控制事件的执行时机。例如:

  • leading:是否在开始时立即执行函数。
  • trailing:是否在停止触发后再执行函数。
示例:结合 leadingtrailing 选项

假设我们希望在用户第一次触发事件时立即执行函数,并在停止触发 1 秒后再次执行。

<input type="text" id="input-field" placeholder="Type something..."><script src="https://cdn.jsdelivr.net/npm/lodash@4.17.21/lodash.min.js"></script>
<script>// 假设这是一个处理输入的函数function handleInput(value) {console.log('Input value processed:', value);}// 使用 debounce 函数,并配置 leading 和 trailing 选项const debouncedInput = _.debounce(function(event) {handleInput(event.target.value);}, 1000, { leading: true, trailing: true });// 监听输入框的输入事件document.getElementById('input-field').addEventListener('input', debouncedInput);
</script>
  • 解释
    • leading: true:用户开始输入时,立即执行 handleInput 函数。
    • trailing: true:用户停止输入 1 秒后,再次执行 handleInput 函数。
    • 这样我们既可以在输入时立即响应,又可以在用户停止输入后执行最后一次处理。

4. 总结

  • 防抖(Debounce)

    • 在短时间内频繁触发时,只有最后一次操作才执行。
    • 适合场景:输入框搜索、窗口大小调整等。
  • 节流(Throttle)

    • 在一定时间间隔内保证事件只触发一次,无论事件多频繁。
    • 适合场景:页面滚动、按钮点击、鼠标移动等。

使用 lodashdebouncethrottle 函数,不仅简化了代码,还提高了应用性能和可维护性。

相关文章:

  • 进程的那些事--实现shell
  • 云计算中过等保三级需要的网络安全设备及详细讲解
  • 深度学习框架的选择:深入比较PyTorch与TensorFlow
  • Stable Diffusion ControlNet 的 control model(控制模型)
  • C语言 | Leetcode C语言题解之第442题数组中重复的数据
  • vue3 拖拽插件(drag)
  • UG NX二次开发(C#)-加工-创建加工坐标系,将刀位点和刀轴矢量变换到加工坐标系
  • 【python】函数介绍
  • 电子相册|智能化电子相册|基于java的电子相册管理系统设计与实现(源码+数据库+文档)
  • Python的风格应该是怎样的?除语法外,有哪些规范?
  • 深度学习之开发环境(CUDA、Conda、Pytorch)准备(4)
  • Kafka:架构与核心机制
  • Python酷库之旅-第三方库Pandas(129)
  • UML中类和类之间关系和各种图
  • C语言 | Leetcode C语言题解之第445题两数相加II
  • 《Java8实战》-第四章读书笔记(引入流Stream)
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • ESLint简单操作
  • HTTP请求重发
  • JavaScript类型识别
  • Less 日常用法
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • vue数据传递--我有特殊的实现技巧
  • webpack入门学习手记(二)
  • zookeeper系列(七)实战分布式命名服务
  • 构建二叉树进行数值数组的去重及优化
  • 蓝海存储开关机注意事项总结
  • 前言-如何学习区块链
  • 小程序测试方案初探
  • ionic异常记录
  • 选择阿里云数据库HBase版十大理由
  • ​决定德拉瓦州地区版图的关键历史事件
  • # wps必须要登录激活才能使用吗?
  • # 透过事物看本质的能力怎么培养?
  • #HarmonyOS:基础语法
  • (1)(1.13) SiK无线电高级配置(五)
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (C语言)strcpy与strcpy详解,与模拟实现
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (安卓)跳转应用市场APP详情页的方式
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (论文阅读11/100)Fast R-CNN
  • (没学懂,待填坑)【动态规划】数位动态规划
  • (原創) X61用戶,小心你的上蓋!! (NB) (ThinkPad) (X61)
  • (转)http-server应用
  • ./configure,make,make install的作用(转)
  • .chm格式文件如何阅读
  • .libPaths()设置包加载目录
  • .NET CF命令行调试器MDbg入门(四) Attaching to Processes
  • .net framework profiles /.net framework 配置