你知道什么是防抖和节流吗?

2024-05-04 18:52
文章标签 知道 节流 防抖

本文主要是介绍你知道什么是防抖和节流吗?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

1 先举个例子 

2 使用场景

3 代码实现

3.1 防抖的实现

3.2 节流的实现


1 先举个例子 

防抖,更像是坐电梯,早上眼看9点了,都着急坐电梯上去打卡,但眼看电梯要关了,进来一个人,等几秒,这几秒钟进来人他不关,几秒后他就关。眼看电梯要上去了,要关了,又有人按了一下,又等几秒。要不老有人着急按下那个“—><—”键呢。

所以防抖就是,遇到重复事件,就往后重新计时;

节流更像是坐火车,火车是有时刻表的,哪怕车站人来人往,不断有人要来坐车,从北京去上海或者去天津,我就是15分钟一趟,15分钟就车就开走,乘客们抓紧了啊。

所以节流就是,遇到重复执行,爱重复不重复,15分钟后准时来一次。

2 使用场景

防抖的使用场景:

  • 比如手机号,邮箱,或者用户输入一些内容,输入的这些信息需要验证库里是否存在这种操作,肯定是希望用户输完去验证的;
  • 比如用户调整窗口大小,那个resize事件肯定是一直在执行,所以需要执行完成后再计算大小,做一些操作,防止频繁渲染;

节流的使用场景:

  • 节流是说固定时间执行一次,比如下拉加载,也不能一下拉就重新请求数据,下拉完了就请求肯定不行,万一他隔3秒下拉一次呢,所以就是直接节流,限定长一些时间一次,就像发车时刻表一样;

3 代码实现

3.1 防抖的实现

function debounce(func, delay) {let timeoutId;return function() {const context = this;const args = arguments;clearTimeout(timeoutId);timeoutId = setTimeout(function() {func.apply(context, args);}, delay);};
}

这个 debounce 函数接受两个参数:

  • func: 要延迟执行的函数。
  • delay: 延迟时间(以毫秒为单位)。

它返回一个新函数,该函数在被调用时会启动一个定时器,在延迟时间后执行 func 函数。如果在延迟时间内该函数被再次调用,则会清除之前的定时器,并重新启动一个新的定时器。

示例用法:

// 假设有一个函数 handleInput,我们希望延迟执行它
function handleInput() {console.log("Input handled");
}// 创建一个防抖函数
const debounceHandleInput = debounce(handleInput, 300); // 300 毫秒延迟// 用于输入框输入事件
inputBox.addEventListener('input', debounceHandleInput);

3.2 节流的实现

function throttle(func, delay) {let lastExecutedTime = 0;return function() {const currentTime = Date.now();if (currentTime - lastExecutedTime > delay) {func.apply(this, arguments);lastExecutedTime = currentTime;}};
}

这个 throttle 函数接受两个参数:

  • func: 要限制执行频率的函数。
  • delay: 限制的时间间隔(以毫秒为单位)。

它返回一个新函数,该函数在被调用时会检查上一次执行 func 函数的时间,如果距离上一次执行的时间超过了 delay,则再次执行 func 函数,并更新上一次执行的时间。

示例用法:

// 假设有一个函数 handleScroll,我们希望限制它的执行频率
function handleScroll() {console.log("Scroll event handled");
}// 创建一个节流函数
const throttleHandleScroll = throttle(handleScroll, 300); // 300 毫秒限制// 监听滚动事件
window.addEventListener('scroll', throttleHandleScroll);

这篇关于你知道什么是防抖和节流吗?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/959874

相关文章

说一说三大运营商的流量类型,看完就知道该怎么选运营商了!

说一说三大运营商的流量类型,看完就知道该怎么选运营商了?目前三大运营商的流量类型大致分为通用流量和定向流量,比如: 中国电信:通用流量+定向流量 电信推出的套餐通常由通用流量+定向流量所组成,通用流量比较多,一般都在100G以上,而且电信套餐长期套餐较多,大多无合约期,自主激活的卡也是最多的,适合没有通话需求的朋友办理。 中国移动:通用流量+定向流量 移动推出的套餐通常由通用流量+定向

Android 你应该知道的学习资源 进阶之路贵在坚持

coderzheaven 覆盖各种教程,关于Android基本时案例驱动的方式。 非常推荐 thenewcircle 貌似是个培训机构,多数是收费的,不过仍然有一些free resources值得你去挖掘。 coreservlets 虽然主打不是android,但是android的教程也​ 是相当不错的,更好的是,教程都提供pdf、ppt、源码的下载。期待它

Python编程技巧:下划线的11种妙用,看看你知道几种?

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 文章内容 📒📝 用法一:Python控制台中的上次结果📝 用法二:命名变量的蛇形命名法(snake_case)📝 用法三:大数字的可读性📝 用法四:忽略不重要的值📝 用法五:用于吸收中间值📝 用法六:在for循环中忽略变量📝 用法七:半私有变量📝 用法八:名称重整(Name Mangling)📝 用法九:双下划线方法(D

高中生都知道:Mybatis-Plus如何生成内置Sql的?

一:文章背景 本文从源码的角度进行分析Mybatis-Plus,为了阅读且吸收的更顺利,希望读者有以下基础: 对Java、Spring、Mybatis、Mybatis-Plus有一定的了解/使用基础对底层源码有略微学习,哪怕是为了框架二开、框架扩展或知识储备本文章参考源码 3.4.2 二:问题带入 使用过Mybatis-Plus的同学都知道不需要写xml即可使用默认的【单表】的增删改查及单

【必看】每个开发人员都应该知道的 10 个 GitHub 库

GitHub🌟:155K + 被难题困住了?还是需要一些建议来指导你进入开发者行业?这个 仓库 将为你提供帮助。它拥有想要成为前端、后端或 DevOps 工程师需要的所有技术。你可以选择符合需求的或适合自己的,因为它提供了多种多样的技术。 3. OSSU Computer Science GitHub🌟:81K + 如果你没有计算机学科的相关履历或学位,但又想达到相同的水平,那么这个仓

聊聊你不知道的建造者设计模式

距离上次写博客的距离也快一个月了,最近打算跟大家分享一下建造者模式,其实这个模式以前也介绍过,当时只是介绍它在android项目中广泛被应用于创建对象的链式调用,并没有深入的去说明其中的逻辑性,由于这次跟王大哥讨论建造者模式,我还是决定写一篇博客记录一下自己对建造者模式的理解,各位可以提出不同的观点,相互交流 1:Builder 设计模式 1.1:为什么要用建造者模式1.2:建造者模式的几个

【计算机】我不允许还有人不知道数据库是什么

数据库是计算机科学中的一个核心概念,它是用于存储、检索、管理和处理数据的系统。在现代的软件开发和信息技术中,数据库扮演着至关重要的角色。以下是关于数据库的一些基本要点: 数据存储: 数据库提供了一个结构化的方式来存储数据,使得数据可以高效地组织和访问。它通过表格(tables)、行(rows)、列(columns)等结构来组织数据,使得数据之间的关系清晰明了。 数据检索: 数据库管理系统(DB

关于 CheckBox 你或许不知道的一些知识点

CheckBox 的默认效果是文字在右边,如下所示 但是我们经常是有文字在左边的需求.可以按照下面的方式进行处理 <CheckBox android:text="CheckBox"android:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/checkBox"

经常用border的solid,你知道border的这几种值吗?

偶尔发现了,border-style的其他几个值,同时打都不常用,还挺新鲜的    以前做微信红酒的时候,有个奇葩测试妹子给我提了一个bug (说 li标签之间是虚线,不是点),(ps:我当时心里心里还嘲笑她什么虚线、点,调下粗细就行了。哈哈,有小伙伴给我犯过相同的错误的吗?)   border:medium dotted  red; border:medium dashe

前端开发不得不知道的十大ES6新特性

转自:http://www.oschina.net/news/71566/es6-developers-will-have-to-know 谢谢大牛 ES6(ECMAScript2015)的出现,无疑给前端开发人员带来了新的惊喜,它包含了一些很棒的新特性,可以更加方便的实现很多复杂的操作,提高开发人员的效率。 本文主要针对ES6做一个简要介绍。 主要译自:《Top 10 ES6 Feat