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,一经查实,立即删除!

相关文章

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] 模仿博客形式&…

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、确认是否超过授权数目…

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;让每个节点计算自己手中有几张是红桃&#…

伦敦银条有多大投资价值?

伦敦银本来是指存放在伦敦地下金库的实物白银银条&#xff0c;这个市场上银条的标准规格为1000金衡盎司。但随着信息科技技术的进步以及贵金属市场的发展&#xff0c;现在的伦敦银交易已经完全实现了电子化。 在当今的贵金属投资市场&#xff0c; 伦敦银的交易网络已经遍布全球…

LIO-SAM算法解析

文章目录 简介算法概述1.点云去畸变1.1 主要功能1.2 主要流程 2.特征提取3.IMU预积分4.地图优化5.算法评估 简介 LIO-SAM在lego-loam的基础上新增了对IMU和GPS的紧耦合&#xff0c;采用一个因子图对位姿进行优化&#xff0c;包括IMU因子&#xff0c;激光里程计因子&#xff0c…

打破尺寸记录!荷兰QuTech研发16量子点阵列新技术

承载16个量子点交叉条阵列的量子芯片&#xff0c;可无缝集成到棋盘图案&#xff08;图片来源&#xff1a;网络&#xff09; 由荷兰代尔夫特理工大学(TU Delft)和荷兰应用科学研究组织(TNO)组建的荷兰量子计算研究中心QuTech的研究人员开发了一种用相对较少的控制线来控制大量量…

Git(四)底层命令:git对象、树对象、提交对象

目录 一、知识回顾1.1 Linux 基础命令1.2 .git 文件夹解析 二、git 对象&#xff08;数据对象&#xff09;2.1 hash-object 存储对象2.2 cat-file 查看对象 三、树对象3.1 ls-files 查看暂存区3.2 update-index 创建暂存区3.3 write-tree 生成树对象3.4 更新暂存区&#xff0c;…

基于Java的电影院订票管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09; 代码参考数据库参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&am…

mysql查看插入记录与查看mysql实时查询和插入速度

我真正关心的数据 比如一秒钟到底能插入多少行数据?慢查询有多少? 慢是一个相对概念,慢的绝对值时间是可以设置的,例如我设置long_query_time为10秒,那么但凡超过10秒的查询都可以认为是慢查询查询操作的超时时间mysql中系统变量什么意思?怎么查看系统变量? show varia…

如何在linux服务器上安装Anaconda与pytorch,以及pytorch卸载

如何在linux服务器上安装Anaconda与pytorch&#xff0c;以及pytorch卸载 1&#xff0c;安装anaconda1.1 下载anaconda安装包1.2 安装anaconda1.3 设计环境变量1.4 安装完成验证 2 Anaconda安装pytorch2.1 创建虚拟环境2.2 查看现存环境2.3 激活环境2.4 选择合适的pytorch版本下…

外网访问|SD-WAN跨境网络专线助力企业摆脱网络困境

在如今国际市场的大趋势下&#xff0c;跨境访问和沟通对于外贸企业来说至关重要&#xff0c;国际市场的竞争越来越激烈&#xff0c;外贸企业需要与全球各地的合作伙伴、客户和供应商保持紧密的跨境访问和沟通。而在解决跨境网络困境方面&#xff0c;MPLS、VPN和SD-WAN是常见的选…