前端知识速记:节流与防抖

前端知识速记:节流与防抖

什么是防抖?

防抖是一种控制事件触发频率的方法,通常用于处理用户频繁触发事件的场景。防抖的核心思想是将多个连续触发事件合并为一个事件,以减少执行次数。它在以下场景中特别有效:

  • 输入框输入事件:实时搜索、输入验证等。
  • 窗口调整大小(resize)事件:减少窗口大小变化时的处理频率。

防抖的实现

防抖的实现依赖于计时器。每次触发事件时,都会重置计时器,只有在事件停止触发一定时间后才执行该事件处理函数。

function debounce(fn, delay) {let timer = null;return function(...args) {if (timer) clearTimeout(timer);timer = setTimeout(() => {fn.apply(this, args);}, delay);};
}// 使用示例
const input = document.getElementById('input');
input.addEventListener('input', debounce(() => {console.log('用户输入:', input.value);
}, 300));

在这个例子中,输入事件会在用户停止输入后 300 毫秒触发,避免了频繁的输出。

什么是节流?

节流与防抖的目标相似,但其实现方式有所不同。节流是指限制事件的触发频率,保证在一定时间内事件只会执行一次。节流特别适合以下场景:

  • 滚动监听:限制滚动事件的处理,避免性能瓶颈。
  • 定时器定时执行任务:实现定期执行的功能。

节流的实现

节流可以通过时间戳或定时器实现。这里展示使用时间戳进行节流的示例:

function throttle(fn, limit) {let lastTime = 0;return function(...args) {const now = Date.now();if (now - lastTime >= limit) {lastTime = now;fn.apply(this, args);}};
}// 使用示例
window.addEventListener('scroll', throttle(() => {console.log('用户在滚动');
}, 500));

在这个例子中,用户滚动事件的处理函数每 500 毫秒最多触发一次,以减少计算量和提高性能。

节流与防抖的区别

  • 触发时机:防抖在事件触发后的一段时间内若再次触发则会重新计时,保证事件只执行一次;而节流是保证在一定时间内只执行一次,无论事件触发了多少次。
  • 适用场景:防抖适用于用户输入等需要等待用户停止操作的场景;节流适用于需要在一定时间内持续操作的场景,例如滚动或窗口缩放。

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

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

相关文章

无人机图传模块 wfb-ng openipc-fpv,4G

openipc 的定位是为各种模块提供底层的驱动和linux最小系统,openipc 是采用buildroot系统编译而成,因此二次开发能力有点麻烦。为啥openipc 会用于无人机图传呢?因为openipc可以将现有的网络摄像头ip-camera模块直接利用起来,从而…

蓝桥杯例题一

不管遇到多大的困难,我们都要坚持下去。每一次挫折都是我们成长的机会,每一次失败都是我们前进的动力。路漫漫其修远兮,吾将上下而求索。只有不断努力奋斗,才能追逐到自己的梦想。不要害怕失败,害怕的是不敢去尝试。只…

【JavaEE进阶】图书管理系统 - 壹

目录 🌲序言 🌴前端代码的引入 🎋约定前后端交互接口 🚩接口定义 🍃后端服务器代码实现 🚩登录接口 🚩图书列表接口 🎄前端代码实现 🚩登录页面 🚩…

【算法设计与分析】实验8:分支限界—TSP问题

目录 一、实验目的 二、实验环境 三、实验内容 四、核心代码 五、记录与处理 六、思考与总结 七、完整报告和成果文件提取链接 一、实验目的 掌握分支界限求解问题的思想;针对不同的问题,能够利用分支界限法进行问题拆分和求解以及时间复杂度分析…

【3】阿里面试题整理

[1]. ES架构,如何进行路由以及选主 路由:在Elasticsearch(ES)中,默认的路由算法是基于文档的_id。具体来说,Elasticsearch会对文档的_id进行哈希计算,然后对分片数量取模,以确定该文…

【Linux】opencv在arm64上提示找不到libjasper-dev

解决opencv在arm64上提示找不到libjasper-dev的问题。 本文首发于❄慕雪的寒舍 问题说明 最近我在尝试编译opencv,安装依赖项libjasper1和libjasper-dev的时候就遇到了这个问题。在amd64平台上,我们可以通过下面的命令安装(ubuntu18.04&…

【数据结构】_时间复杂度相关OJ(力扣版)

目录 1. 示例1:消失的数字 思路1:等差求和 思路2:异或运算 思路3:排序+二分查找 2. 示例2:轮转数组 思路1:逐次轮转 思路2:三段逆置(经典解法) 思路3…

基于微信小程序的电子商城购物系统设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…

【linux】Linux 常见目录特性、权限和功能

目录特性默认权限主要功能/用途/根目录,所有目录的起点755文件系统的顶层目录,包含所有其他子目录和文件/bin基础二进制命令目录(系统启动和修复必需的命令)755存放所有用户可用的基本命令(如 ls, cp, bash 等&#xf…

docker直接运行arm下的docker

运行环境是树莓派A 处理器是 arm32v6 安装了docker,运行lamp 编译安装php的时候发现要按天来算,于是用电脑vm下的Ubuntu系统运行arm的docker 然后打包到a直接导入运行就可以了 第一种方法 sudo apt install qemu-user-static 导入直接运行就可以了…

计算机网络一点事(22)

地址解析协议ARP ARP:查询Mac地址 ARP表(ARP缓存):记录映射关系,一个数据结构,定期更新ARP表 过程:请求分组,响应分组 动态主机配置协议DHCP 分配IP地址,配置默认网关…

tomcat核心组件及原理概述

目录 1. tomcat概述 1.1 概念 1.2 官网地址 2. 基本使用 2.1下载 3. 整体架构 3.1 核心组件 3.2 从web.xml配置和模块对应角度 3.3 如何处理请求 4. 配置JVM参数 5. 附录 1. tomcat概述 1.1 概念 什么是tomcat Tomcat是一个开源、免费、轻量级的Web服务器。 Tomca…

科技快讯 | OpenAI首次向免费用户开放推理模型;特朗普与黄仁勋会面;雷军回应“10后小学生深情表白小米SU7”

不用开口:谷歌 AI 帮你致电商家,价格、预约一键搞定 谷歌在1月30日推出Search Labs中的“Ask for Me”实验性功能,用户可利用AI代替自己致电商家咨询价格和服务。该功能已与美汽车修理厂和美甲沙龙店合作,用户需加入Search Labs并…

帆软 FCA -业务分析师认证学习

帆软 FCA -业务分析师认证学习 认证概述 适合人群 企业中有需求管理、指标梳理、业务逻辑梳理、项目规划等需求的人员,想提升综合数据能力、推进数据应用落地的业务/IT骨干。 具体-FCA-业务分析理论 考试要求: FCA-业务分析理论考试- 费用&#xff1a…

Vue.js路由管理与自定义指令深度剖析

Vue.js 是一个强大的前端框架,提供了丰富的功能来帮助开发者构建复杂的单页应用(SPA)。本文将详细介绍 Vue.js 中的自定义指令和路由管理及导航守卫。通过这些功能,你可以更好地控制视图行为和应用导航,从而提升用户体验和开发效率。 1 自定义指令详解 1.1 什么是自定义…

Maya软件安装步骤与百度网盘链接

软件简介: MAYA软件是Autodesk旗下的著名三维建模和动画软件。maya软件功能更为强大,体系更为完善,因此国内很多的三维动画制作人员都开始转向maya,maya软件已成为三维动画软件的主流。 百度网盘链接: https://pan.baidu.com/s…

kamailio的部分模块的解释及代码示例【文章由DeekSeek大模型提供】

以下是 Kamailio 中这些模块的详细说明及示例代码: 1. tls.so 作用:提供 TLS 支持,用于加密 SIP 通信。示例:loadmodule "tls.so" modparam("tls", "certificate", "/etc/kamailio/tls/serve…

深入理解linux中的文件(上)

1.前置知识: (1)文章 内容 属性 (2)访问文件之前,都必须打开它(打开文件,等价于把文件加载到内存中) 如果不打开文件,文件就在磁盘中 (3&…

一个用于测试的 HL7 Server

说明 一个用于测试的 HL7 Server。在过NIST的认证时,需要演示检验数据通过HL7进行传输,所以写了这工具。 HL7的消息解析和编码使用了NHapi。包含两个服务: ReceiveServiceSendService 这2个服务都继承自 BaseService public class BaseSe…

使用 Go 和 gqlgen 实现 GraphQL API:实战指南

使用 Go 和 gqlgen 实现 GraphQL API:实战指南 在本文中,我将分享如何使用 Go 语言和 gqlgen 框架实现一个完整的 GraphQL API。我们将构建一个包含用户、文章和评论功能的博客系统 API。 技术栈 Gogqlgen (GraphQL 框架)MySQL (数据存储)Redis (缓存…