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/195103.shtml

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

相关文章

Python爬虫:使用Scrapy框架进行高效爬取

Python爬虫可使用的架构有很多&#xff0c;对于我而言&#xff0c;经常使用Scrapy异步处理框架Twisted&#xff0c;其实意思很明确&#xff0c;Scrapy可以实现多并发处理任务&#xff0c;同一时间将可以处理多个请求并且大大提高工作效率。 Scrapy是一个强大且高效的Python爬虫…

鸿蒙Watch 页面跳转

新建页面 config.json 回自动注册 添加跳转 <button type"capsule" onclick"toStatusMonitor">状态检测</button>写跳转方法 import router from system.router;export default {data: {},onInit() {},onShow() {},toStatusMonitor() {rou…

深度学习——第3章 Python程序设计语言(3.2 Python程序流程控制)

无论是在机器学习还是深度学习中&#xff0c;Python已经成为主导性的编程语言。而且&#xff0c;现在许多主流的深度学习框架&#xff0c;例如PyTorch、TensorFlow也都是基于Python。本课程主要是围绕“理论实战”同时进行&#xff0c;所以本章将重点介绍深度学习中Python的必备…

pandas、numpy的几个示例

这里写自定义目录标题 Pandas 示例NumPy 示例数据分析案例: Iris 数据集 Pandas 示例 Pandas 是一个数据处理和分析的库&#xff0c;它提供了 DataFrame 和 Series 这两种主要数据结构。 # 从字典创建 DataFrame import pandas as pd# 创建一个字典 data {Name: [Alice, Bob…

C++学习之路(十七)C++ 用Qt5实现一个工具箱(增加托盘图标并且增加显示和退出菜单)- 示例代码拆分讲解

上篇文章&#xff0c;我们用 Qt5 实现了在小工具箱中添加了《为屏幕颜色提取功能增加一个点击复制的功能》功能。今天我们增加一个比较正式点的功能&#xff0c;就是增加托盘图标并且增加显示和退出菜单&#xff08;越来越像回事了吧 &#x1f601; &#xff09;。下面我们就来…

【CMD】关于在for中SET变量失效的问题

如题&#xff0c;在for中进行一些细化操作时发现SET变量一直不成功(尤其在读取文件时)   简单搜了下看到有个帖子(BAT求助与讨论-SET变量失效)是讨论这个问题的&#xff0c;然后有个老哥给出的解答&#xff0c;其中使用了使用CALL&#xff0c;这让我想起几天前看到的一个博客…

Linux4.7、环境变量

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 目录 基本概念 见见环境变量 指令原理 常见环境变量及其测试 环境变量相关指令 环境变量组织方式 通过代码获取环境变量 通过系统变量获取环境变量以及设置环境变量 环境变量的全局属性 基本概念 首先&#xff0c;…

什么?居然可以免费使用Jetbrains?!

JetBrains是一家捷克的软件开发公司&#xff0c;该公司位于捷克的布拉格&#xff0c;并在俄罗斯的圣彼得堡及美国麻州波士顿都设有办公室&#xff0c;该公司最为人所熟知的产品是Java编程语言开发撰写时所用的集成开发环境&#xff1a;IntelliJ IDEA。 如下是jetbrains旗下的产…

【笔记】Clion 中运行 C/C++11 之 CMakeLists.txt 的配置

该文章记录第一次使用 Clion 时&#xff0c;对 CMakeLists 的配置&#xff0c;使其能够运行 C/C11 的代码。 一. CMakeLists.txt 的配置 1、首先我们在需要新建一个项目 2、填写新建项目相关的信息 3、修改 CMakeLists.txt 文件内容 替换文本&#xff1a; # 使用此 CMakeLis…

帆软报表不能增加SAP连接方式 通过插件一致性检测 同步至本地解决

帆软报表开发人员需要增加一个SAP数据连接方式&#xff1a;SAP_ECC_600环境 在服务器端不能直接增加&#xff0c;而在帆软报表设计器切换到远程模式时&#xff0c;又不能显示SAP连接&#xff0c;导致不能增加。 解决&#xff1a;重新进入帆软报表报计器时报以下错误&#xff0c…

开源运维监控系统-Nightingale(夜莺)应用实践(未完)

一、前言 某业务系统因OS改造,原先的Zabbix监控系统推倒后未重建,本来计划用外部企业内其他监控系统接入,后又通知需要自建才能对接,考虑之前zabbix的一些不便,本次计划采用一个类Prometheus的监控系统,镜调研后发现Nightingale兼容Prometheus,又有一些其他功能增强,又…

从马帮到金蝶云星空通过接口配置打通数据

从马帮到金蝶云星空通过接口配置打通数据 接入系统&#xff1a;马帮 上海马帮科技有限公司&#xff0c;是一家专注于提供全流程跨境电商ERP管理软件解决方案的企业。聚焦服务于各阶段、各领域的跨境电商从业者&#xff0c;旗下包含专业版ERP、亚马逊专用版ERP、东南亚海外版ERP…

JavaScript空值合并运算符

The Nullish Coalescing Operator&#xff08;空值合并运算符&#xff09;是一种 JavaScript 的新运算符&#xff0c;用于解决默认值设定中存在的一些问题。它的语法为 ??&#xff08;两个问号&#xff09;&#xff0c;表示当左侧的操作数为 null 或 undefined 时&#xff0c…

【java+vue+微信小程序项目】从零开始搭建——健身房管理平台(1)spring boot项目搭建、vue项目搭建、微信小程序项目搭建

项目笔记为项目总结笔记,若有错误欢迎指出哟~ 【项目专栏】 【java+vue+微信小程序项目】从零开始搭建——健身房管理平台(1)项目搭建 持续更新中… java+vue+微信小程序项目】从零开始搭建——健身房管理平台 项目简介Java项目搭建(IDEA)1.新建项目2.项目类型3.项目设置4…

mysql基础语句

【select查询】 1、Select * from 表名; 查询 例&#xff1a; Where 限定的条件查询 AND 连接两个或者多个查询条件 OR 连接两个或者多个查询条件&#xff0c;满足其中一个就可以查询出 2、Select * from 表名 where 字段 某某条件&#xff1b; 例&#xff1a; 3、Selec…

EasyRecovery易恢复2024最新免费版电脑数据恢复软件功能介绍

EasyRecovery从&#xff08;易恢复2024&#xff09;支持恢复不同存储介质数据&#xff0c;在Windows中恢复受损和删除文件,以及能检索数据格式化或损坏卷&#xff0c;甚至还可以从初始化磁盘。同时&#xff0c;你只需要最简单的操作就可以恢复数据文件&#xff0c;如&#xff1…

kubeadm 安装k8s1.28.x 底层走containerd 容器

1. k8s1.28.x 的概述 1.1 k8s 1.28.x 更新 Kubernetes v1.28 是 2023 年的第二个大版本更新&#xff0c;包含了 46 项主要的更新。 而今年发布的第一个版本 v1.27 有近 60 项&#xff0c;所以可以看出来&#xff0c;在发布节奏调整后&#xff0c; 每个 Kubernetes 版本中都会包…

DeepSort知识整理:余弦距离和马氏距离 (一)

一、余弦距离 1.1 余弦相似度 余弦相似度是用来衡量两个非零向量之间的夹角的余弦值。对于两个向量 A A A 和 B B B&#xff0c;余弦相似度的计算公式为&#xff1a; C o s i n e S i m i l a r i t y ( A , B ) A ⋅ B ∥ A ∥ ∥ B ∥ {\rm{Cosine Similarity }}\left( …

maven篇---第二篇

系列文章目录 文章目录 系列文章目录前言一、什么是Maven的坐标?二、讲一下maven的生命周期三、说说你熟悉哪些maven命令?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的…

离散型制造业生产管理mes系统介绍

典型的离散制造业主要包括机械、电子、航空、汽车等行业&#xff0c;这些企业既有按订单生产&#xff0c;也有按库存生产&#xff0c;既有批量生产&#xff0c;也有单件小批生产。那么&#xff0c;注重生产计划的制定&#xff0c;生产的快速响应是离散行业MES系统应用的关键。 …