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

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

相关文章

Python中你不知道的gzip高级用法分享

《Python中你不知道的gzip高级用法分享》在当今大数据时代,数据存储和传输成本已成为每个开发者必须考虑的问题,Python内置的gzip模块提供了一种简单高效的解决方案,下面小编就来和大家详细讲... 目录前言:为什么数据压缩如此重要1. gzip 模块基础介绍2. 基本压缩与解压缩操作2.1 压缩文

Java8需要知道的4个函数式接口简单教程

《Java8需要知道的4个函数式接口简单教程》:本文主要介绍Java8中引入的函数式接口,包括Consumer、Supplier、Predicate和Function,以及它们的用法和特点,文中... 目录什么是函数是接口?Consumer接口定义核心特点注意事项常见用法1.基本用法2.结合andThen链

Vue2电商项目(二) Home模块的开发;(还需要补充js节流和防抖的回顾链接)

文章目录 一、Home模块拆分1. 三级联动组件TypeNav2. 其余组件 二、发送请求的准备工作1. axios的二次封装2. 统一管理接口API----跨域3. nprogress进度条 三、 vuex模块开发四、TypeNav三级联动组件开发1. 动态展示三级联动数据2. 三级联动 动态背景(1)、方式一:CSS样式(2)、方式二:JS 3. 控制二三级数据隐藏与显示--绑定styl

[情商-13]:语言的艺术:何为真实和真相,所谓真相,就是别人想让你知道的真相!洞察谎言与真相!

目录 前言: 一、说话的真实程度分级 二、说谎动机分级:善意谎言、中性谎言、恶意谎言 三、小心:所谓真相:只说对自己有利的真相 四、小心:所谓真相:就是别人想让你知道的真相 五、小心:所谓善解人意:就是别人只说你想要听到的话 前言: 何为真实和真相,所谓真相,就是别人想让你知道的真相!洞察谎言与真相! 人与人交流话语中,处处充满了不真实,完全真实的只是其中一小部分,这

看病要排队这个是地球人都知道的常识

归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍+ 收藏⭐ + 留言​📝唯有付出,才有丰富的果实收获! 看病要排队这个是地球人都知道的常识。 不过经过细心的0068的观察,他发现了医院里排队还是有讲究的。0068所去的医院有三个医生(汗,这么少)同时看病。而看病的人病情有轻重,所以不能根据简单的先来

纳米材料咋设计?蛋白质模块咋用?看这里就知道啦!

大家好,今天我们来了解一项关于蛋白质纳米材料设计的研究——《Blueprinting extendable nanomaterials with standardized protein blocks》发表于《Nature》。蛋白质结构复杂,其组装体的设计颇具挑战。但近期的研究取得了新突破,通过设计标准化的蛋白质模块,如线性、曲线和转角模块等,实现了纳米材料的可扩展性和规律性。这

只有对比,才知道伊利股份半年报的高成色

投资圈有句名言:“当潮水退去的时候,才知道谁在裸泳”。大环境顺风顺水,大家看着都挺好,只有环境变化,才更容易分辨出来,谁才是真有实力。当下,在消费环境弱复苏的大背景下,高成色的半年报业绩让伊利股份的实力一览无余。 8月29日,伊利股份发布中期业绩。上半年,面对严峻复杂的市场环境,伊利直面挑战、主动调整,实现营业总收入599.15亿元,归母净利润75.31亿元,均稳居行业第一。

从新手到大师:Java并发编程你必须知道的那些事!

文章目录 1 进程和线程的区别?2 如何创建一个线程实例并且运行它?3 Runnable 和 Callable 接口有什么区别?它们是如何使用的?4 方法定义中 synchronized 关键字的含义是什么?静态方法?在一个块之前 ? 1 进程和线程的区别? 进程是独立的执行单元,拥有自己的资源和内存,而线程是在进程内的执行单元,共享进程的资源。线程可以高效地执行任务,但需

程序猿必须知道的一些有用的(外国)网站

在学习计算机科学(CS)时,必须知道一些有用的网站,以便随时掌握信息,了解技术前沿和学习新技术。下面是你应该访问的一些网站的不详尽的列表,一旦我得到了另一个链接,这个列表就会被更新,但是你也可以添加你知道的网站来做贡献。 索引 当你遇到困境时 新闻 初学者的编码实践 给那些想开始一个小项目却找不到点子的人 一般编码建议 编码风格 一般工具 面试的准备

Spark你需要知道这些

谈到 Spark,我们总是强调它比 Hadoop 更高效。为什么它可以更高效呢?是因为它优先使用内存存储?还是因为它拥有比 MapReduce 更简单高效的计算模型? 与 Hadoop 作业的区别 我们知道在 Hadoop 中,一个作业(Job)可以有一个或多个Task,Task 又可以分成 Map Task 和 Reduce Task。每个Task 分别在自己的进程中运行,Hadoop 中一