js中的防抖和节流

当你在JavaScript中处理用户输入或其他事件时,你可能会遇到一些性能和用户体验方面的挑战。其中两个常见的技术是防抖(Debouncing)和节流(Throttling)。它们用于控制事件触发的频率,以提高网页性能和用户体验。

防抖(Debouncing)

  • 防抖的目标是确保一个函数在连续触发事件后的一段延迟时间内只执行一次,而在这段延迟期间如果又触发了事件,计时器会被重置。
  • 典型应用:用户输入搜索框时,只在用户停止输入一段时间后执行搜索操作,而不是每次按键都触发搜索。
  • 实现方式:使用 setTimeout 设置一个延迟时间,每次触发事件时都清除之前的计时器,重新设置计时器。函数执行只在计时器到达设定延迟时间后触发。

如何实现防抖?

下面是一个简单的JavaScript函数,用于实现防抖:

function debounce(func, delay) {let timer;return function() {clearTimeout(timer);timer = setTimeout(() => {func.apply(this, arguments);}, delay);};
}
  • func是要防抖的函数。
  • delay是触发函数的延迟时间。

如何使用防抖?

onst debouncedFunction = debounce(yourFunction, 300);// 在事件处理中使用防抖
element.addEventListener('input', debouncedFunction);

在上面的示例中,yourFunction将在用户输入停止300毫秒后执行,这样可以减少不必要的函数调用。

节流(Throttling)

  • 节流的目标是确保一个函数在一定时间内只执行一次,不论事件触发的频率有多高。
  • 典型应用:滚动事件、鼠标移动事件等,限制函数执行的频率,以减少性能开销。
  • 实现方式:使用时间戳(timestamp)记录上一次函数执行的时间,每次触发事件时,检查当前时间与上一次执行时间的时间间隔,只有当时间间隔超过设定的阈值时才执行函数。

如何实现节流?

下面是一个简单的JavaScript函数,用于实现节流:

function throttle(func, limit) {let inThrottle;return function() {if (!inThrottle) {func.apply(this, arguments);inThrottle = true;setTimeout(() => inThrottle = false, limit);}};
}
  • func是要节流的函数。
  • limit是触发函数的最小间隔时间。

如何使用节流?

const throttledFunction = throttle(yourFunction, 500);// 在事件处理中使用节流
element.addEventListener('scroll', throttledFunction);

在上面的示例中,yourFunction将在滚动事件触发后的500毫秒内最多执行一次,以减少不必要的函数调用。

总结

  • 防抖适合处理高频触发的事件,只在事件停止触发后执行一次。
  • 节流适合限制事件触发的频率,确保函数在一定时间间隔内执行。
  • 选择防抖还是节流取决于具体的需求和应用场景。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/133630.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

配置阿里云镜像加速器 -docker

1.百度aliyun 2.找到镜像服务ACR 3.搞一个个人版&#xff0c;身份验证一下就行了很简单 4.找到镜像加速器Centos 5.执行下面4条命令&#xff1a;4条命令直接从上面操作文档中粘贴&#xff0c;不容易出错 sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<…

Win10 + VS017 编译SQLite3.12.2源码

参考&#xff1a; [1] WIN10 VS2019下编译GDAL3.0PROJ6SQLite_gdal 3 win10编译-CSDN博客 [2] 如何编译SQLite-How To Compile SQLite-CSDN博客 如何生成静态库&#xff1a; 参考&#xff1a; WIN10 VS2019下编译GDAL3.0PROJ6SQLite_gdal 3 win10编译-CSDN博客 如何生成exe:…

电动车展示预约小程序的作用如何

电动车可以说是现在出行常见的方法&#xff0c;覆盖年龄广几乎是每家必备&#xff0c;也有不小大小品牌和经销商&#xff0c;市场需求较高&#xff0c;但在实际经营中&#xff0c;对经销商来时也面临着一些痛点&#xff1a; 1、品牌传播产品展示难 不同品牌竞争很大&#xff…

Spark 基础知识点

Spark 基础 本文来自 B站 黑马程序员 - Spark教程 &#xff1a;原地址 什么是Spark 什么是Spark 1.1 定义&#xff1a;Apache Spark是用于大规模数据&#xff08;large-scala data&#xff09;处理的统一&#xff08;unified&#xff09;分析引擎 Spark最早源于一篇论文 Re…

viple入门(五)

&#xff08;1&#xff09;自定义活动 自定义活动&#xff0c;用来创建新的组件、服务、函数或者其他代码模块&#xff0c;使用最多的是创建函数。 函数是对一个功能的封装&#xff0c;在调用的时候执行&#xff0c;没有调用的时候则不执行。函数可能有参数&#xff0c;可能没…

在 ASP.NET C# 中用Aspose.PDF将 PDF 页面转换为 JPG 图像

PDF 是一种通用格式&#xff0c;通常用于打印和共享文档。 &#xff08;一&#xff09;C# PDF to JPG Converter API - 免费下载 Aspose.PDF for .NET是一个强大的 PDF 操作 API&#xff0c;可让您在 .NET 应用程序中创建和处理 PDF 文件。此外&#xff0c;它还允许您将 PDF 文…

让Redis在你的系统中发挥更大作用

Redis在很多方面与其他数据库解决方案不同&#xff1a;它使用内存提供主存储支持&#xff0c;而仅使用硬盘做持久性的存储&#xff1b;它的数据模型非常独特&#xff0c;用的是单线程。另一个大区别在于&#xff0c;你可以在开发环境中使用Redis的功能&#xff0c;但却不需要转…

信号发送与处理-上

问题 按下 Ctrl C 后&#xff0c;命令行中的前台进程会被终止。为什么&#xff1f;&#xff1f;&#xff1f; 什么是信号&#xff1f; 信号是一种 "软件中断"&#xff0c;用来处理异步事件 内核发送信号到某个进程&#xff0c;通知进程事件的发送事件可能来自硬件…

nvm 用法

1. nvm 有什么用 nodejs 的版本管理工具&#xff0c;使用 nvm 切换 node 版本变得极其方便。 2. 下载 点击下载nvm 3. nvm 操作 nvm list available //查看可安装NodeJS版本 nvm ls // 已安装node版本 nvm install xx.xx.xx // 安装node版本 nvm uninstall xx.xx.xx // 卸载…

工具: MarkDown学习

具体内容看官方教程&#xff1a; Markdown官方教程

zustand管理工具--React

npm i zustand 1.函数参数必须返回一个对象 对象内部编写状态数据和方法 2.set是用来修改数据的专门方法必须调用它来修改数据 import { useEffect } from "react"; import { create } from "zustand";// 1. 创建store const goodsStore create((set) …

基于 golang 从零到一实现时间轮算法 (三)

引言 本文参考小徐先生的相关博客整理&#xff0c;项目地址为&#xff1a; https://github.com/xiaoxuxiansheng/timewheel/blob/main/redis_time_wheel.go。主要是完善流程以及记录个人学习笔记。 分布式版实现 本章我们讨论一下&#xff0c;如何基于 redis 实现分布式版本的…

RuntimeError: Distributed package doesn‘t have NCCL built in

因为windows不支持NCCL backend 已解决 import os os.environ["PL_TORCH_DISTRIBUTED_BACKEND"] "gloo"

TextMate v2.0.23(文本编辑器)

Mac上好用的文本编辑器是哪个&#xff1f;TextMate 2 mac版是Macos上一款文本编辑器&#xff0c;支持大量编程语言并作为开源开发。该软件与“BBEdit”并成为苹果电脑上的EMACS和vim&#xff0c;对于程序员来说非常的适合&#xff0c;可以定制许多贴心的功能。为专业脚本编写者…

基于ruoyi框架项目-部署到服务器上

基于ruoyi框架项目-部署到服务器上 文章目录 基于ruoyi框架项目-部署到服务器上1.前端vue编译&#xff0c;后的dist下内容打包&#xff08;前后端分离版本需要&#xff09;2.后端打包成jar包&#xff08;如果是thymeleaf仅需打包jar&#xff09;3.上传到服务器目录下4. docker部…

2023北京1024城市开发者聚会总结

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

2011年408计网

第33题 TCP/IP 参考模型的网络层提供的是&#xff08;&#xff09;A. 无连接不可靠的数据报服务B. 无连接可靠的数据报服务C. 有连接不可靠的虚电路服务D. 有连接可靠的虚电路服务 本题考查TCP/IP 参考模型的网络层 若网络层提供的是虚电路服务&#xff0c;则必须建立网络层的…

Magic Bullet Suite v2024.0.1

Red Giant Magic Bullet Suite是一套AE视频后期处理软件&#xff0c;适用于Premiere Pro、After Effects等视频编辑软件。它提供了多种精美的视频特效和调色工具&#xff0c;使得视频制作更加专业和出色。 Magic Bullet Suite包括多个插件&#xff0c;其中最为知名的是Magic B…

Flink SQL TopN语句详解

TopN 定义&#xff08;⽀持 Batch\Streaming&#xff09;&#xff1a; TopN 对应离线数仓的 row_number()&#xff0c;使⽤ row_number() 对某⼀个分组的数据进⾏排序。 应⽤场景&#xff1a; 根据 某个排序 条件&#xff0c;计算 某个分组 下的排⾏榜数据。 SQL 语法标准&am…

【软考】2023下半年系统集成项目管理工程师案例分析真题(第五批次)

2023下半年系统集成项目管理工程师案例分析真题&#xff08;第五批次&#xff09; 案例一 (17分)-配置管理案例二 &#xff08;20分&#xff09;-进度管理案例三 &#xff08;18分&#xff09;-风险管理案例四 - 人力资源管理 系列文章版本记录 案例一 (17分)-配置管理 某游戏公…