JavaScript高级:防抖和节流

1 防抖(debounce)

单位时间内,频繁触发事件,只执行最后一次

【例子】王者荣耀英雄回城,只要被打断就要重新来

【应用场景】1. 搜索框搜索输入。只需用户最后一次输入完,再发送请求;2. 手机号、邮箱验证输入检测。

【需求】鼠标在盒子上滑动,并在盒子上显示滑动的次数

如果不使用防抖, 那么在盒子上的数字将会增加的非常快,如果是一些非常消耗性能的代码,可能会造成卡顿

1.1 使用 lodash 库实现防抖

无论滑动多少下 1s后才加1

       语法:

        _.debounce(func, [wait=0], [options={}])

        func: 需要防抖的函数

        wait: 延迟执行的时间

        options: 配置对象

【代码】

const box = document.querySelector('.box')
let i = 1
function mouseMove() {// 如果里面存在大量消耗性能的代码,比如dom操作,比如数据处理,可能造成卡顿box.innerHTML = i++
}
box.addEventListener('mousemove', _.debounce(mouseMove, 1000))

1.2 手写防抖函数

【代码】

        // 2.手写防抖函数// 核心是利用 setTimeOut 定时器实现// 2.1 声明定时器变量// 2.2 每次鼠标移动(事件触发)的时候先判断是否有定时器,如果有则清除以前的定时器// 2.3 如果没有定时器,则开启定时器,存入定时器变量里面// 2.4 在定时器里面写函数调用function debounce(fn, t) {let timer = nullreturn function () {if (timer) clearTimeout(timer)timer = setTimeout(function () {fn()}, t)}}box.addEventListener('mousemove', debounce(mouseMove, 500))

2 节流(throttle)

 单位时间内,频繁触发事件,只执行一次

【例子】王者荣耀英雄技能,在那段时间内你只能用一次该技能,下次想要用,需要等待技能冷却完毕

【应用场景】1. 鼠标连续触发某事件(如鼠标连续点击),只在单位时间内执行一次; 2. 监听滚动事件scroll,每隔100ms执行一次,实现防抖效果;3.页面尺寸缩放 resize

2.1 使用lodash库实现节流

        语法:

        _.throttle(func, [wait=0], [options={}])

        func: 需要节流的事件处理函数

        wait: 在wait 秒内最多执行func 一次的函数

box.addEventListener('mousemove', _.throttle(mouseMove, 3000))

2.2 手写节流函数

        // 2.2 手写节流函数// 核心是利用 setTimeOut 定时器实现// 2.2.1 声明定时器变量// 2.2.2 每次鼠标移动(事件触发)的时候先判断是否有定时器,如果有则清除以前的定时器// 2.2.3 如果没有定时器,则开启定时器,存入定时器变量里面// 2.2.4 在定时器里面写函数调用function throttle(fn, t) {let timer = nullreturn function () {if (timer) returntimer = setTimeout(function () {fn()timer = null}, t)}}box.addEventListener('mousemove', throttle(mouseMove, 3000))

因为在 setTimeout 中是无法删除定时器的,因为定时器还在运作,所以使用timer = null 

3 节流案例

【需求】在一个网页中播放了一个视频,在我下次再次打开这个页面时,视频的进度在我之前播放到的位置

【补充知识】

【代码】 

  <script src="https://cdn.jsdelivr.net/npm/lodash@4.17.21/lodash.min.js"></script><script>// ontimeupdate  触发频次太高,我们设定 1秒钟触发一次const video = document.querySelector('.video video')video.ontimeupdate = _.throttle(() => {// console.log(video.currentTime)// 把间隔一秒就把当前播放时间存储到本地存储中localStorage.setItem('currentTime', video.currentTime)}, 1000)// 打开页面的时候,从本地存储中获取当前播放时间video.onloadeddata = () => {video.currentTime = localStorage.getItem('currentTime') || 0}</script>

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

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

相关文章

美国将限制中国,使用Azure、AWS等云,训练AI大模型

1月29日&#xff0c;美国商务部在Federal Register&#xff08;联邦公报&#xff09;正式公布了&#xff0c;《采取额外措施应对与重大恶意网络行为相关的国家紧急状态》提案。 该提案明确要求美国IaaS&#xff08;云服务&#xff09;厂商在提供云服务时&#xff0c;要验证外国…

生产问题排查系列——未知404状态接口请求

引言 我们的产品主打金融服务领域&#xff0c;以B端客户为我们的核心合作伙伴&#xff0c;然而&#xff0c;我们的服务最终将惠及C端消费者。在技术实现上&#xff0c;我们采用了公司自主研发的微服务框架&#xff0c;该框架基于SpringBoot&#xff0c;旨在提供高效、可靠的服…

Day06-Linux下目录命令讲解及重要文件讲解

Day06-Linux下目录命令讲解及重要文件讲解 1. Linux目录文件1.1 Linux系统目录结构介绍1.1.1 Linux与Windows目录结构对比 1.2 重要的Linux配置文件介绍1.2.1 /etc系统初始化及设置相关重要文件1.2.2 /usr目录的重要知识介绍------应用程序目录1.2.3 /var目录下的路径知识-----…

Mac如何设置一位数密码?

一、问题 Mac如何设置一位数密码&#xff1f; 二、解答 1、打开终端 2、清除全局账户策略 sudo pwpolicy -clearaccountpolicies 输入开机密码&#xff0c;这里是看不见的&#xff0c;输入完回车即可 3、重新设置密码 &#xff08;1&#xff09;打开设置-->用户和群组…

jenkins 下载插件sentry-cli失败 证书过期

现状 npm set ENTRYCLI_CDNURLhttps://cdn.npm.taobao.org/dist/sentry-cli npm set sentrycli_cdnurlhttps://cdn.npm.taobao.org/dist/sentry-cli 原因是npm原域名停止解析&#xff0c;在访问上面sentry-cli的cdn资源的时候 证书过期无法下载。 解决&#xff1a; 替换证书过期…

解析Excel文件内容,按每列首行元素名打印出某个字符串的统计占比(超详细)

目录 1.示例&#xff1a; 1.1 实现代码1&#xff1a;列数为常量 运行结果&#xff1a; 1.2 实现代码2&#xff1a;列数为变量 运行结果&#xff1a; 1.示例&#xff1a; 开发需求&#xff1a;读取Excel文件&#xff0c;统计第3列到第5列中每列的"False"字段占…

机器学习算法决策树

决策树的介绍 决策树是一种常见的分类模型&#xff0c;在金融风控、医疗辅助诊断等诸多行业具有较为广泛的应用。决策树的核心思想是基于树结构对数据进行划分&#xff0c;这种思想是人类处理问题时的本能方法。例如在婚恋市场中&#xff0c;女方通常会先询问男方是否有房产&a…

【c语言】简单贪吃蛇的实现

目录 一、游戏说明 ​编辑 二、地图坐标​ ​编辑 三、头文件 四、蛇身和食物​ 五、数据结构设计​ 蛇节点结构如下&#xff1a; 封装一个Snake的结构来维护整条贪吃蛇&#xff1a;​ 蛇的方向&#xff0c;可以一一列举&#xff0c;使用枚举&#xff1a; 游戏状态&a…

C# winform 多语言(json)方式实现

前后对比 使用nuget json工具包1.总体思路 创建对应的json字典对照表 { "测试":"Test", "语言":"Language", "设置":"Set", "中文(默认)":"Chinese (default)", "英文":"E…

用通俗易懂的方式讲解:一文详解大模型 RAG 模块

文章目录 什么是 RAG&#xff1f;技术交流&资料通俗易懂讲解大模型系列 RAG模块化什么是模块化RAG&#xff1f; 索引模块块优化滑动窗口从小到大元数据附加 结构化组织层次化索引知识图谱文档组织 预检索模块查询扩展多查询子查询CoVe 查询转换重写HyDE 查询路由元数据路由…

Java对象属性设置方式

&#x1f497;wei_shuo的个人主页 &#x1f4ab;wei_shuo的学习社区 &#x1f310;Hello World &#xff01; 对象属性设置方式 直接赋值 SystemMappingCode systemMappingCode new SystemMappingCode();systemMappingCode.setCodeResp(request.getCodeResp());systemMapping…

面试八股文(2)

文章目录 1.ArrayList和LinkedList区别2.HashMap和HashTable区别3.线程的创建方式4.Java中异常处理5.Java序列化中某些字段不想进行序列化&#xff1f;6.Java序列化7.静态方法和实例方法8.List、Set、Map三者区别9.ArrayList和Vector区别10.HashMap和HashSet区别 1.ArrayList和…

flask基于Python的期货交易模拟系统的django-afl61-vue

期货交易模拟系统是一个便于用户在线查看期货投资、取消投资、风险控制、账户资金、持仓资金等&#xff0c;管理员进行管理的平台。因此本文主要论述了系统开发的过程和实现的功能&#xff0c;结合Web技术来实现的期货交易模拟系统。本系统以软件工程理论为开发基础&#xff0c…

Linux系统Shell脚本-----------正则表达式 文本三剑客之---------grep、 sed

一、正则表达式 1.前言 正则表达式(regular expression)描述了一种字符串匹配的模式&#xff08;pattern&#xff09;&#xff0c;可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。在Linux中也就是代表我们定义的模式模板&…

【GitHub项目推荐--ChatGPT开源项目】【转载】

Auto-GPT Auto-GPT 是一个实验性的开源项目&#xff0c;基于 GPT-4。你给出 Auto-GPT 一个的任务&#xff0c;它不会立即输出答案&#xff0c;而会先自己通过多轮对话来琢磨、验证、决策&#xff0c;从而自己找出一条达成目标的路&#xff0c;整个过程完全不需要人类插手&…

Facebook的社交影响力:用户行为解析与趋势

在当今数字时代&#xff0c;社交媒体已经成为人们日常生活中不可或缺的一部分&#xff0c;而Facebook作为全球最大的社交平台之一&#xff0c;其社交影响力愈发显著。本文将深入分析Facebook的社交影响力&#xff0c;解析用户行为&#xff0c;同时探讨当前和未来的社交趋势。 社…

数据可视化 pycharts实现时间数据可视化

自用版 数据格式为&#xff1a; 运行效果为&#xff1a; from pyecharts import options as opts from pyecharts.charts import Polar, Page import csv filename "./hot-dog-places.csv" data_x [] data_y [] with open(filename) as f:reader csv.reade…

Python 中常用图像数据结构

&#xff08;原文&#xff1a;https://blog.iyatt.com/?p13222 &#xff09; 1 测试环境 Python 3.12.1 numpy 1.26.3 opencv-python 4.9.0.80 pillow 10.2.0 matplotlib 3.8.2 注&#xff1a; 基于 2022.1.16 和 2022.4.9 的三篇博文再次验证并重写&#xff0c;原文已删…

Stable diffusion使用和操作流程

Stable Diffusion是一个文本到图像的潜在扩散模型,由CompVis、Stability AI和LAION的研究人员和工程师创建。它使用来自LAION-5B数据库子集的512x512图像进行训练。使用这个模型,可以生成包括人脸在内的任何图像,因为有开源的预训练模型,所以我们也可以在自己的机器上运行它…

网络时间协议NTP工作模式

单播服务器/客户端模式 单播服务器/客户端模式运行在同步子网中层数较高层上。这种模式下,需要预先知道服务器的IP地址。 客户端:运行在客户端模式的主机(简称客户端)定期向服务器端发送报文,报文中的Mode字段设置为3(客户端模式)。当客户端接收到应答报文时,客户端会…