JS —— js中的节流与防抖

news2024/11/18 11:45:24

文章目录

  • 前言
  • 节流
    • 1.什么是节流
    • 2.做节流可解决什么问题
    • 3.如何做节流
  • 二、防抖
    • 1.什么是防抖
    • 2.做防抖可解决什么问题
    • 3.如何做防抖
  • 总结

前言

最近有同学问到节流与防抖的相关知识点,于是乎,四处查资料,找一找,看一看,终于理解了相关知识点,这就来分享给大家!


一、节流

1.什么是节流

  • 节流:当某个操作是连续性执行的时候,我们通过某种方式,降低该操作的执行频率,这就是节流。就跟水龙头放水一下,节流可以起到开关的作用,可以调节水流的大小。
  • 比如讲某个操作在1秒钟内会执行100次,通过节流方式,让该操作在1秒钟内只会执行10次,那么就做到节流。

2.做节流可解决什么问题

我们有很多场景,比如我们在拖动一个物体的时候,会监听物体的坐标,一般情况下,只要一拖动,坐标就会实时返回,会返回很多次,这其实没有必要的,如果我们有需求是需要记录这些坐标的话,就会产生很多没有必要的数据。这个时候,如果做了节流处理的话,就能大大降低执行的次数,避免很多不必要的数据记录。

那么哪些实应用场景需要使用节流呢?

 如下图所示,我在页面中放置了一个盒子,当鼠标移入时获取当前鼠标位于盒子的位置,那么当鼠标移动时,控制台就会一直输入位置信息

 那么如何避免这个问题呢,在这里就可以使用节流来解决这个问题。

3.如何做节流

   思路讲解:

 1.声明一个全局变量存储触发事件。
 2.每一次触发事件,获取当前时间。

 3.判断当前时间与上一次触发事件,是否超过了间隔。
 4.如果超过间隔时间,则执行事件处理代码,然后存储本次触发的时间。

    //声明一个全局变量存储触发时间
    let lastTime = nullm
    //页面滚动事件
    window.onscroll = function () {
      //1.每一次触发 先获取本次时间戳
      let currentTime = Date.now()
      //2.判断当前时间 与 上次触发时间 是否超过间隔
      if (currentTime - lastTime >= 500) {
        console.log(document.documentElement.scrollTop)//获取滚动距离
        //3.存储本次的触发时间
        lastTime = currentTime
      }
    }

二、防抖

1.什么是防抖

首先,先去解释一下什么叫做防抖, 在事件被触发n秒后再执行回调,如果在这n秒内又被触发,则重新计时。纯理论是比较抽象的,还是用代码来的实在。

2.防抖可用来解决什么问题

 

假设: 我有一个<input>标签,并想获得输入时的值,代码是这样的:

<body>
    <input type="text">
    <script>
        let input = document.querySelector("input");
        input.addEventListener('input',function(){
            console.log(this.value);
        })
    </script>
</body>

执行的结果如下:


 从例子中可以看到如果我们需要在输入字符时进行相应的操作,那么势必会给浏览器造成很大的压力,发送多次请求,那么如何避免这种情况呢,这就可以用节流来解决这个问题!

3.如何做防抖

  实现防抖的思路  

1.声明一个全局变量存储触发事件。

2.每一次触发事件,获取当前时间。

3.判断当前时间与上一次触发事件,是否超过了间隔。

4.如果超过间隔时间,则执行事件处理代码,然后存储本次触发的时间。

具体代码实现:

 //声明一个全局变量存储触发时间
    let lastTime = nullm
    //页面滚动事件
    window.onscroll = function () {
      //1.每一次触发 先获取本次时间戳
      let currentTime = Date.now()
      //2.判断当前时间 与 上次触发时间 是否超过间隔
      if (currentTime - lastTime >= 500) {
        console.log(document.documentElement.scrollTop)//获取滚动距离
        //3.存储本次的触发时间
        lastTime = currentTime
      }
    }

总结

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

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

相关文章

单元测试:会变化的定义

有一种东西&#xff0c; 如果它太小&#xff0c;需要付出的努力就太大&#xff1b;如果它太大&#xff0c;就很难测试。 没错&#xff01;它是单元。 但是什么才是一个好的单元定义呢?为什么它如此重要? 单元的定义对测试过程有很大的影响&#xff0c;但同时单元的定义也是不…

Transformer总结和梳理

Transformer总结和梳理Positional encodingSelf-attentionMulti--head-attentionAdd&NormAdd操作Norm操作FeedForwardMASKPadding MaskedSelf-Attention Masked首先来看一下Transformer结构的结构&#xff1a;Transformer是由Encoder和Decoder两大部分组成&#xff0c;首先…

mysql安装与配置及四大引擎和数据类型、建表以及约束、增删改查、常用函数、聚合函数以及合并

目录 一.mysql安装与配置 1.mysql简介 2.mysql 安装 安装MySQL&#xff08;8.0的版本&#xff09; 安装MySQL&#xff08;5.7的版本&#xff09; 删除MySQL&#xff08;这是5.5版本的卸载方式&#xff09; 3.命令行登陆及权限修改 一.启动方式 二.停止 三.重启 wind…

LeetCode每日一题——808. 分汤

LeetCode每日一题系列 题目&#xff1a;808. 分汤 难度&#xff1a;普通 文章目录LeetCode每日一题系列题目示例思路题解题目 有 A 和 B 两种类型 的汤。一开始每种类型的汤有 n 毫升。有四种分配操作&#xff1a; 提供 100ml 的 汤A 和 0ml 的 汤B 。 提供 75ml 的 汤A 和…

大衣哥在《火火的情怀》后,和孟文豪张成军推出《新时代的农民》

最近一段时间&#xff0c;因为《火火的情怀》版权问题&#xff0c;农民歌唱家大衣哥&#xff0c;被著名导演兼编剧谷传民起诉。话说大衣哥因为被谷传民起诉&#xff0c;也被推上了舆论的风口浪尖&#xff0c;同时也让《火火的情怀》又一次大火。 在谷传民起诉大衣哥的案件当中&…

注册会计师怎么注册非执业?注会执业与非执业有何区别

注册会计师怎么注册非执业?以下就是关于注册会计师怎么注册非执业等等的介绍&#xff0c;希望对您有所帮助! 一、申请注册为非执业会员 取得注册会计师考试已合格&#xff0c;但尚未在中国境内从事审计业务工作二年以上者&#xff0c;可以自行向取得全科合格证书省级注册会计…

调研主板,树莓派 VS RK3288板子,还是 RK的主板香,但是只支持 anrdoid 7系统,估计也有刷机成 armbian或者

1&#xff0c;目前树莓派好贵啊&#xff01;Pi4bB 2G卖810 现在价格是&#xff1a;800多啊&#xff0c;疯了 哎真叫贵。 但是有个东西叫做 广告机的板子&#xff0c;是批量生产放到商场&#xff0c;地铁播视频的。 再配上一个屏幕&#xff0c;就可以直接播放广告了。 不同的地…

计算机网络4小时速成:传输层,功能,UDP协议,TCP协议,三次握手,传输数据,四次握手,超时重传,流量控制

计算机网络4小时速成&#xff1a;传输层 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0c;可能很多算法学生都得去找开发&#xff0c;测开 测开的话&#xff0c;你就得学数据库&#xff0c;sql&#xff0c;oracle&#xff0c…

【云原生】Kubernetes(k8s)Calico 客户端工具 calicoctl

文章目录一、概述二、calicoctl 安装三、calicoctl 简单使用1&#xff09;认证信息配置2&#xff09;查看 IP 资源池3&#xff09;配置 IP 池4&#xff09;IP 资源池示例演示5&#xff09;固定 IP 示例演示6&#xff09;网络策略&#xff08;NetworkPolicy&#xff09;四、Kube…

盘点MySQL的八大日志,你知道哪些?

前言 日志对于任何系统应用来说都承载着至关重要的作用&#xff0c;借助日志&#xff0c;我们可以发现系统运行错误的原因&#xff0c;从而解决问题。MySQL也不例外&#xff0c;也会记录各种各样的日志信息。那么你知道MySQL都有哪些日志吗&#xff1f;每种日志的作用是干吗吗…

【Ajax】全面详细了解git的基础操作【万字教学+面试常客】

✍️ 作者简介: 前端新手学习中。 &#x1f482; 作者主页: 作者主页查看更多前端教学 &#x1f393; 专栏分享&#xff1a;css重难点教学 Node.js教学 从头开始学习 ajax学习 文章目录学习目标起步——关于版本的控制  文件的版本  版本控制软件  使用版本控制软件的好…

UDP和TCP两大协议的区别,让你快速高效掌握

UDP和TCP两大协议的区别 谈起UDP与TCP两大协议的异同&#xff0c;有人说我喜欢用TCP不喜欢用UDP&#xff0c;也有人说我喜欢用UDP而不喜欢用TCP&#xff0c;使用TCP的人说&#xff0c;我使用使用的协议比较可靠、不容易粘包、不容易丢包;使用UDP的人说&#xff0c;我使用的协议…

电脑没有声音了怎么恢复?恢复声音的6个方法【图解】

如今&#xff0c;很多电脑用户都会购买上各种不同品牌的音效产品&#xff0c;以便在必要时可以用来作为背景音乐。但在使用电脑过程中&#xff0c;总会遇到一些声音问题。有些朋友可能会因为声音问题而导致电脑无法正常使用。那么&#xff0c;电脑没有声音了怎么恢复&#xff1…

SpringSecurity框架【详细教学】

SpringSecurity 文章目录 文章目录SpringSecurity文章目录1、概述2、Spring Security、[Apache](https://so.csdn.net/so/search?qApache&spm1001.2101.3001.7020) Shiro 选择问题2.1、Shiro2.1.1、shiro的优点2.1.2、shiro的缺点2.2、Spring Security2.2.1、spring-secu…

计控实验(一)—— 数字滤波实验

太原理工大学计算机控制技术实验之数字滤波实验 数字滤波实验实验原理实验内容实验线路图设计参考流程图实验步骤及结果采样周期设计运行结果思考题实验原理 一般现场环境比较恶劣&#xff0c;干扰源比较多&#xff0c;消除和抑制干扰的方法主要有模拟滤波和数字滤波两种。由于…

Mybatis—解析SQL配置

Mybatis源代码中SqlSource描述XML文件或者Java注解配置的SQL信息&#xff0c;SqlNode描述动态SQL配置中的<if>和<where>等标签&#xff0c;LanguageDriver的职责就是负责将Mapper SQL配置进行解析&#xff0c;然后将SQL配置信息转换为SqlSource对象。从而可见Langu…

Nginx补充部分--IO模型

IO模型 服务端IO流程 磁盘I/O 磁盘I/O是进程向内核发起系统调用&#xff0c;请求磁盘上的某个资源比如是html 文件或者图片&#xff0c;然后内核通过相应的驱动程序将目标文件加载到内核的内存空间&#xff0c;加载完成之后把数据从内核内存再复制给进程内存&#xff0c;如果…

postgres-operator 原理解析- 章节 II 减少failover次数

本文讨论一波&#xff0c;kubernetes集群部署的高可用postgresql集群在滚动更新场景下&#xff0c;如何实现减少failover次数&#xff1f; 这个原理我觉得适用于任何主从架构的中间件&#xff0c;是一个通用的设计技巧。 那就是&#xff1a; 在进行滚动升级过程中&#xff0c…

谁在领跑纯电动L2

电动化智能化&#xff0c;正在产生协同效应。 根据高工智能汽车研究院最新监测数据显示&#xff0c;2022年1-10月&#xff0c;中国市场&#xff08;不含进出口&#xff09;乘用车前装标配搭载L2级辅助驾驶交付上险受到整体车市影响&#xff0c;同比下滑12.67%。不过&#xff0c…

关闭jupyter notebook报错

关闭jupyter notebook报错:python.exe-应用程序错误_秋叶原の黑猫的博客-CSDN博客 关闭jupyter notebook报错:python.exe-应用程序错误 此前在使用jupyter notebook的时候&#xff0c;没有出现问题&#xff0c;后面某次在使用之后&#xff0c;直接关闭终端之后&#xff0c;出现…