JS防抖与节流(含实例各二种写法 介绍原理)

防抖

防抖是什么?
单位时间内,频繁触发事件,只执行最后一次
通俗易懂点就是把防抖想象成MOBA游戏的回城,在回城过程中被打断就要重来
例子:我们来做一个效果,我们鼠标在盒子上移动,数字就变化 +1
基础样式代码:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title></title><style>.box {width: 200px;height: 200px;background-color: red;margin: 100px auto;text-align: center;line-height: 200px;font-size: 30px;}</style>
</head>
<body><div class="box"></div>
</body>
</html>

在这里插入图片描述
接下来我们来实现这个效果
没防抖时:

    // 获取盒子const box = document.querySelector(".box")// 定义一个num控制数字let i = 0// 设置鼠标移动事件box.onmousemove = function() {// 移动就+1box.innerHTML = i++}

如图所示,我们鼠标移动,数字不停的+1
请添加图片描述
我们使用防抖的方式写,这里介绍2种方式

第一种 先执行

    // 获取盒子const box = document.querySelector(".box")// 控制数字var num = 1// 存一个延迟器 关键 let timer //undefined// setInterval(() => {//     console.log(typeof timer) //大家可以实验一下可以更了解原理// }, 1000)box.onmousemove = function () {let obj = timer //第一次是undefined// 移动就清除定时器clearTimeout(timer)// 当鼠标不在移动时执行延迟器 1s后执行timer = setTimeout(() => {// 给timer传一个空 空就赋值给了全局作用域种的timer// 只有当鼠标移动时 全局作用域timer赋值给了objtimer = null}, 1000)// 一移入就判断// 第一次obj是undefined 所以一移入就 +1// 第二次我鼠标停止不动 timer=null 就赋值给了全局的timer// 只有移动才触发全局的timer赋值给 obj 所以 +1if (!obj) {// num++box.innerHTML = num++}}

请添加图片描述

第二种 后执行

    // 获取盒子const box = document.querySelector(".box")// 控制数字var num = 1// 存一个延迟器let timer box.onmousemove = function () {// 鼠标移动就清除延迟器clearTimeout(timer)// 鼠标停止时 1s +1 // 继续移动停止 1s +1// 只有移动了才会触发timer = setTimeout(() => {box.innerHTML = num++}, 1000)}

请添加图片描述

节流

节流是什么?
节流是单位时间内,频繁触发事件,只执行一次
通俗易懂点就是把防抖想象成MOBA游戏中角色的技能,在技能冷却时间内,技能无法释放,只有冷却结束才可以继续释放
使用场景:
高频事件: 鼠标移动 mousemove、页面尺寸缩放 resize 、滚动条滚动 scroll 等等
例子:与上面防抖例子一样 样式也一样 我们来使用节流处理数字
介绍二种写法

第一种 延迟器

    // 获取盒子const box = document.querySelector(".box")// 控制数字let num = 1// 存延迟器let timer// 绑定鼠标移动事件box.onmousemove = function () {// 移动就判断 不移动就一直不进入判断// 第一次移动timer 为undefined // 第一次为undefined !undefined为true 执行if (!timer) {timer = setTimeout(() => {// 1s之后 null赋值给timer 现在全局里的timer为nulltimer = null// 1s后 num++box.innerHTML = num++}, 1000)}}

请添加图片描述

第二种 时间戳

    // 获取盒子const box = document.querySelector(".box")// 控制数字let num = 1// 控制时间var timeNew = 0;// 绑定鼠标移动事件box.onmousemove = function () {// 获取时间戳let timeOld = Date.now()// 判断如果老时间戳 - 新时间戳 大于了 1000 就执行if (timeOld - timeNew > 1000) {// 大于了就把老时间戳赋值给新时间戳// 这样就可以控制住时间timeNew = timeOld// 大于就++box.innerHTML = num++}}

请添加图片描述
感谢大家的阅读,本人文笔有限,如有不对的地方,可以向我提出,感谢大家!

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

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

相关文章

如何在外网访问内网服务器数据库

在外网访问内网服务器上的数据库需要一定的网络设置和安全配置。这是一个常见的需求&#xff0c;尤其是对于远程办公、云服务集成或远程数据库管理来说。以下是一些一般的步骤&#xff0c;您可以按照这些步骤进行配置&#xff1a; 请注意&#xff1a;外网访问内网服务器数据库需…

SQL 表达式

SQL 表达式 表达式是计算值的一个或多个值、运算符和SQL函数的组合。这些SQL表达式类似于公式&#xff0c;它们是用查询语言编写的。 您还可以使用它们查询数据库中的特定数据集。 句法 考虑SELECT语句的基本语法&#xff0c;如下所示&#xff1a; SELECT column1, column2, …

CVE-2021-41773/42013 apache路径穿越漏洞

影响范围 CVE-2021-41773 Apache HTTP server 2.4.49 CVE-2021-42013 Apache HTTP server 2.4.49/2.4.50 漏洞原理 Apache HTTP Server 2.4.49版本使用的ap_normalize_path函数在对路径参数进行规范化时会先进行url解码&#xff0c;然后判断是否存在…/的路径穿越符&#xf…

CMMI/ASPICE认证咨询及工具服务

服务概述 质量专家戴明博士的名言“如果你不能描述做事情的过程&#xff0c;那么你不知道你在做什么”。过程是连接有能力的工程师和先进技术的纽带&#xff0c;因此产品开发过程直接决定了产品的质量和研发的效率。 经纬恒润可结合多体系要求&#xff0c;如IATF16949\ISO26262…

Java 基础面试题,JVM 内存模型?

我们在 Java 岗位的面试题中&#xff0c;大概率会碰到这样一个面试题&#xff1a;请你解释你对 JVM 内存模型的理解。 今天我们就来回答一下这个问题&#xff1a; JDK 11 中的 JVM 内存模型可以分为以下几个部分&#xff1a; 程序计数器&#xff08;Program Counter&#xff…

汽车行驶性能的主观评价方法(1)-底盘校准方法

底盘校准的目的是&#xff0c;从行驶性能和行驶舒适性两个方面进行协调&#xff0c;从而优化行驶动力学特性。为了达到这一目标&#xff0c;工程人员早在设计阶段&#xff0c;就对大多数对行驶动力性有重要意义的部件提出了要求。这些要求不仅与底盘的组件有关&#xff0c;还必…

每日汇评:黄金争取本周收于2000美元上方

在周五美国个人消费支出通胀之前&#xff0c;金价巩固了周四的双向价格走势&#xff1b; 在市场情绪改善之际&#xff0c;美元与美债收益率一同下跌&#xff1b; 黄金价格在日线图上确认了一个多头标志&#xff0c;相对强弱指数仍然指向更多的上涨&#xff1b; 周五早盘&#x…

django建站过程(3)定义模型与管理页

定义模型与管理页 定义模型[models.py]迁移模型向管理注册模型[admin.py]注册模型使用Admin.site.register(模型名)修改Django后台管理的名称定义管理列表页面应用名称修改管理列表添加查询功能 django shell交互式shell会话 认证和授权 定义模型[models.py] 模仿博客形式&…

Vue源码总结

1&#xff0c;根据vue工程package.json配置文件查看scripts命令&#xff0c;找到build命令执行的js文件 2&#xff0c;根据构建执行的js文件继续跟进&#xff0c;找到主入口文件 3&#xff0c;从主入口文件直接分析主干代码&#xff0c;追踪export的Vue对象 4&#xff0c;跟…

MINA架构DEMO

参考&#xff1a;Java中的MINA框架_java mina_小陈拾光的博客-CSDN博客 MINA&#xff1a;一个简洁易用的基于TCP/IP通信的JAVA框架。 <dependency><groupId>org.apache.mina</groupId><artifactId>mina-core</artifactId><version>2.1.5&…

学习笔记:概率期望

概率 & 期望 样本空间、随机事件 定义 一个随机现象中可能发生的不能再细分的结果被称为 样本点。所有样本点的集合称为 样本空间&#xff0c;通常用 Ω \Omega Ω 来表示。 一个 随机事件 是样本空间 Ω \Omega Ω 的子集&#xff0c;它由若干样本点构成&#xff0c…

minio + linux + docker + spring boot实现文件上传与下载

minio docker spring boot实现文件上传与下载 1.在linux上安装并启动docker2.在docker中拉取minio并启动3.Spring Boot 整合 minio4.测试 minio 文件上传、下载及图片预览等功能 1.在linux上安装并启动docker 检查linux内核&#xff0c;必须是3.10以上 uname ‐r安装docker…

LiveGBS流媒体平台GB/T28181常见问题-海康大华宇视硬件NVR摄像头通道0未获取到视频通道如何排查如何抓包分析

LiveGBS常见问题海康大华宇视硬件NVR摄像头通道0未获取到视频通道如何排查如何抓包分析&#xff1f; 1、硬件NVR配置接入示例2、通道数为0处置2.1、判断信令是否畅通2.1.1、点击更新通道2.1.2、有成功提示2.1.2.1、确认设备的视频通道编码是否填写2.1.2.2、确认是否超过授权数目…

linux 音视频架构 linux音视频开发

linux 音视频架构 linux音视频开发 转载 mob6454cc65110a 2023-07-26 22:27:01 文章标签 linux 音视频架构 ci QT 视频教程 文章分类 架构 后端开发 阅读数117 目录 前言1、软件工具准备a. 录音软件b. 录屏软件c. 摄像头软件d. 安卓屏幕操作软件e. 视频剪辑软件2、视频教…

Mask Free VIS笔记(CVPR2023 不需要mask标注的实例分割)

paper: Mask-Free Video Instance Segmentation github 一般模型学instance segmentation都是要有mask标注的&#xff0c; 不过mask标注既耗时又枯燥&#xff0c;所以paper中仅用目标框的标注来实现实例分割。 主要针对视频的实例分割。 之前也有box-supervised实例分割&…

2023年集成电路还缺人吗?集成电路产业人才供需研讨会

10月20日&#xff0c;移知教育创始人团长受邀参与由ARM举办的《集成电路产业人才供需研讨会》&#xff0c;同样受邀参与的还有上海大学、华东理工大学、华东师范大学、上海工程技术大学、上海人社高级职称评审专家等等&#xff0c;高校负责人以及行业专家应邀参加了本次研讨会。…

ardupilot开发 --- CAN BUS、DroneCAN 、UAVCAN 篇

1. CAN BUS、DroneCAN 、UAVCAN 区别 UAVCAN是一种轻量级协议&#xff0c;旨在通过CAN BUS 在航空航天和机器人应用中实现可靠通信。 UAVCAN网络是分散的对等网络&#xff0c;其中每个对等体&#xff08;节点&#xff09;具有唯一的数字标识符 - 节点ID&#xff0c;并且仅需要…

Hadoop3.0大数据处理学习3(MapReduce原理分析、日志归集、序列化机制、Yarn资源调度器)

MapReduce原理分析 什么是MapReduce 前言&#xff1a;如果想知道一堆牌中有多少张红桃&#xff0c;直接的方式是一张张的检查&#xff0c;并数出有多少张红桃。 而MapReduce的方法是&#xff0c;给所有的节点分配这堆牌&#xff0c;让每个节点计算自己手中有几张是红桃&#…

简历涉及的面试问题

目录 第一章、技术栈1.0&#xff09;集合框架等基础1、arraylist &#xff0c;linkedlist的区别&#xff0c;为啥集合有的快有的慢2、字符串倒叙输出3、讲一下Java的集合框架4、定义一下线程安全的map&#xff0c;有哪些方法5、equals比较问题6、hashtable和hashmap的区别7、8、…

Python的无限魅力:探索其广泛应用领域

Python的无限魅力&#xff1a;探索其广泛应用领域 前言第一&#xff1a;Python的多领域应用第二&#xff1a;Python在数据科学中的作用第三&#xff1a;python的web开发能力第四&#xff1a;Python在自动化和任务自动化中的应用第五&#xff1a;科学计算和数值分析第六&#xf…