什么是防抖和节流?有什么区别? 如何实现?

防抖(Debounce)节流(Throttle)是两种常用的技术手段,主要用于控制某个函数在一定时间内触发的次数,以减少触发频率,提高性能并避免资源浪费。

防抖(Debounce)的工作原理是,当事件持续触发时,只有在事件停止触发n秒后,才会执行事件函数。如果在n秒内事件被重新触发,那么之前的计时会被重置。这种技术通常用于如模糊搜索、短信验证和文本编辑器实时保存等场景。

节流(Throttle)的工作原理是,当事件持续触发时,每n秒只执行一次函数。如果在n秒内事件被重复触发,那么只有第一次触发的事件会生效。这种技术常用于处理如scroll事件、浏览器播放事件和window的resize等场景。

防抖(Debounce)是指在一定时间内,当函数被频繁触发时,只有在最后一次触发后的延迟时间内,函数才会被真正执行。如果在延迟时间内又有触发事件发生,会重新开始计时。防抖技术常用于搜索框输入、按钮点击等场景,避免短时间内的频繁请求。

以下是一个简单的防抖示例代码:

// 创建一个防抖函数
function debounce(func, delay) {
 let debounceTimer;
 return function () {   // 清除之前设置的定时器   clearTimeout(debounceTimer);   // 设置一个新的定时器,延迟 delay 毫秒后执行 func 函数   debounceTimer = setTimeout(() => {     func.apply(this, arguments);   }, delay); }}// 使用防抖函数
const searchInput = document.getElementById('searchInput');
const debouncedSearch = debounce(() => { console.log('执行搜索操作');}, 500);
searchInput.addEventListener('keyup', debouncedSearch);

在上述示例中,创建了一个名为 debounce 的函数,它接受一个要执行的函数 func 和延迟时间 delay。在调用 debouncedSearch 函数时,会清除之前设置的定时器,并重新设置一个定时器,在延迟时间后执行 func 函数。

节流(Throttle)是指在一定时间内,无论函数被触发多少次,函数只会在固定的时间间隔内执行一次。如果在时间间隔内有多次触发事件,只会执行最后一次。节流技术常用于滚动事件、鼠标移动等场景,限制函数的执行频率。

以下是一个简单的节流示例代码:

// 创建一个节流函数function throttle(func, delay) { let canRun = true; return function () {   if (canRun) {     func.apply(this, arguments);     canRun = false;     setTimeout(() => {       canRun = true;     }, delay);   } }}// 使用节流函数
const scrollEventHandler = throttle(() => { console.log('滚动事件触发');}, 1000);
window.addEventListener('scroll', scrollEventHandler);

在上述示例中,创建了一个名为 throttle 的函数,它同样接受一个要执行的函数 func 和延迟时间 delay。在调用 throttle 函数时,如果 canRun 为 true,则执行 func 函数,并将 canRun 设置为 false。然后,通过设置一个定时器,在延迟时间后将 canRun 设置为 true,以便下一次函数调用。

防抖和节流的主要区别在于:防抖是在最后一次触发后的延迟时间内执行函数,而节流是在固定的时间间隔内执行函数。

选择使用防抖还是节流,取决于具体的业务需求和场景。防抖更适合处理连续的快速触发事件,而节流更适合限制频繁触发事件的执行频率。

希望这个解释对你有所帮助!如果你还有其他问题,请随时提问。

欢迎加入“前端组件开发学习”交流群,一起学习成长!可关注  “前端组件开发” 公众号后,私信后申请入群。

d848d5658a07453c843277846948c608.png

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

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

相关文章

【笔试强训】day8

没啥好说&#xff0c;都是一遍过 1.求最小公倍数 思路&#xff1a; 求lcm。其实就是两数之乘积除以两个数的gcd。gcd就是是求两个数的最大公约数。 代码&#xff1a; #define _CRT_SECURE_NO_WARNINGS 1 #include <iostream> using namespace std;int gcd(int a, int …

轮转数组(Leedcode)的题目

题目&#xff1a;给定一个整数数组 nums&#xff0c;将数组中的元素向右轮转 k 个位置&#xff0c;其中 k 是非负数。 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,3,4,5] 向右轮转 3 步…

C++奇迹之旅:深入学习类和对象的初始化列表

文章目录 &#x1f4dd;再谈构造函数&#x1f320; 构造函数体赋值&#x1f309;初始化列表&#x1f309;初始化列表效率&#x1f320;隐式类型转换&#x1f309;复制初始化 &#x1f320;单多参数构造函数&#x1f309;explicit关键字 &#x1f6a9;总结 &#x1f4dd;再谈构造…

厉害了,Numpy

几乎所有使用Python处理分析数据的人都用过Pandas&#xff0c;因为实在太方便了&#xff0c;就像Excel一样&#xff0c;但你知道Pandas是基于numpy开发出来的吗? Pandas和Numpy的关系类似于国产安卓系统和原生安卓&#xff0c;Numpy提供底层数据结构和算法&#xff0c;搭配数…

C++心决之类和对象详解(中篇)(封装入门二阶)

目录 1.类的6个默认成员函数 2. 构造函数 2.1 概念 2.2 特性 3.析构函数 3.1 概念 3.2 特性 4. 拷贝构造函数 4.1 概念 4.2 特征 5.赋值运算符重载 5.1 运算符重载 5.2 赋值运算符重载 5.3 前置和后置重载 7.const成员 8.取地址及const取地址操作符重载 1.类的…

掌握item_get_app,提升电商推广转化率

一、引言 在数字化时代&#xff0c;电商行业蓬勃发展&#xff0c;竞争也日趋激烈。为了提高销售额和用户满意度&#xff0c;电商企业需要不断探索新的推广策略和技术手段。其中&#xff0c;掌握item_get_app技术&#xff0c;对于提升电商推广转化率具有重要意义。本文将深入探…

软考139-上午题-【软件工程】-软件容错技术

一、软件容错技术 提高软件质量和可靠性的技术大致可分为两类&#xff0c;一类是避开错误&#xff0c;即在开发的过程中不让差错潜入软件的技术&#xff1b;另一类是容错技术&#xff0c;即对某些无法避开的差错&#xff0c;使其影响减至最小的技术。 1-1、容错软件的定义 归…

更换本地yum源的步骤

更换本地yum源的流程与命令&#xff1a;

【Canvas与艺术】绘制圆形biozhazrad蒙版

【关键点】 制作一个半圆形不透明蒙版来造成左右两边相异的明暗效果。 【成果图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><tit…

Vue3、 Vue2 Diff算法比较

Vue2 Diff算法 源码位置:src/core/vdom/patch.ts 源码所在函数:updateChildren() 源码讲解: 有新旧两个节点数组:oldCh和newCh; 有下面几个变量: oldStartIdx 初始值=0 oldStartVnode 初始值=oldCh[0] oldEndIdx 初始值=oldCh.length - 1 oldEndVnode 初始值=oldCh[ol…

Arthas介绍及使用技巧

文章目录 简介能做什么&#xff1f; 使用下载并启动arthas选择应用 java 进程退出 arthas 常用查看命令帮助查看 dashboard通过 thread 命令来获取到线程的栈通过 jad 来反编译 Classwatch 查看方法出入参、sc 搜索类: 查看已加载类所在的包monitor 方法执行监控trace 方法内调…

fastgpt、dify功能分析比较

目录 前言 一、dify、fastgpt是什么&#xff1f; 二、同场pk 1.大模型接入 2.chat&#xff08;最简应用&#xff09; 3.发布应用 4.知识库 5.workflow 6.其他 三、一些point记录 总结 前言 现在都开始AI应用开发&#xff0c;何谓AI应用&#xff0c;起码要和AI大模型…

应对电网挑战!lonQ与橡树岭国家实验室利用量子技术改善关键基础设施

内容来源&#xff1a;量子前哨&#xff08;ID&#xff1a;Qforepost&#xff09; 文丨浪味仙 排版丨沛贤 深度好文&#xff1a;1800字丨6分钟阅读 摘要&#xff1a;美国电网正在面临需求增加和能源扩散的挑战&#xff0c;对能够应对优化和安全挑战的创新解决方案有着迫切需求…

利用结构类型实现简单通讯录

复合数据类型之结构类型 在C语言中&#xff0c;结构类型是一种复合数据类型&#xff0c;它允许用户将不同类型的数据组合成一个单一的数据结构。结构类型为用户提供了自定义数据类型的机制&#xff0c;使得可以将多个相关的数据项组合成一个整体&#xff0c;常用来处理像记录、…

验证二叉搜索树(98)

解题思路&#xff1a;可以直接中序遍历放进一个数组里根据特性判断是否是递增就可以&#xff0c;如果采用递归的思路话用中序遍历和创建一个指针指向前一个节点&#xff0c;根据前一个节点是否比上一个节点小来判断是否是二叉树 具体代码如下&#xff1a; class Solution { …

华为P系列“砍了”,三角美学系列全新登场

2021 年 10 月&#xff0c;Intel 正式带来了颠覆以往的第 12 代酷睿「混合架构」 CPU。 不知道是良心发现还是为了弥补 11 代酷睿过于拉胯表现&#xff0c;Intel 终于把狠活儿都用在了这代。 全新 Intel 7 工艺、全新架构、单核与多核性能大幅提升&#xff0c;让大家十分默契…

【Linux高性能服务器编程】——高性能服务器框架

hello &#xff01;大家好呀&#xff01; 欢迎大家来到我的Linux高性能服务器编程系列之高性能服务器框架介绍&#xff0c;在这篇文章中&#xff0c;你将会学习到高效的创建自己的高性能服务器&#xff0c;并且我会给出源码进行剖析&#xff0c;以及手绘UML图来帮助大家来理解&…

Win 进入桌面黑屏,只有鼠标

大家好&#xff0c;我叫秋意零。 今天&#xff0c;遇到一个同事电脑进入桌面黑屏&#xff0c;只有鼠标。经过询问沟通&#xff0c;说是 Windows 突然进行了自动更新&#xff0c;更新之后桌面就黑了屏。经过查询是一个桌面进程没启动才会导致桌面黑屏。首先分两种情况&#xff0…

代码随想录算法训练营DAY30|C++回溯算法Part.6|332.重新安排行程、51.N皇后、31.解数独

文章目录 332.重新安排行程思路死循环的问题记录映射关系解决死循环并解决字母序问题 伪代码实现CPP代码 51.N皇后思路伪代码实现CPP代码 31.解数独伪代码实现CPP代码 332.重新安排行程 力扣题目链接 文章讲解&#xff1a;332.重新安排行程 状态&#xff1a;题目要求所有机票都…

工业级3D可视化工具HOOPS Visualize, 快速构建移动端和PC端工程应用程序!

HOOPS Visualize是一款强大的工业级3D渲染引擎&#xff0c;帮助您打造出众的工程应用程序。HOOPS Visualize的基石是图形内核&#xff0c;这是一种全功能的&#xff0c;以工程为重点的场景图技术&#xff0c;我们称为Core Graphics。Core Graphics集成到一个框架中&#xff0c;…