函数的防抖与节流

news2024/11/27 8:36:19

一、函数防抖

(一)防抖的理解

防抖就是将所有的触发都取消,在规定的时间结束过后才会执行最后一次,也就是说连续快速的触发只会执行最后一次结果。

也可以理解为游戏里的回城按钮,每点一下就会重新刷新回城进度,永远以最后一次点击为准。

例如:我们现在有一个输入框,在没有使用防抖的情况下,我们输入一个字符就会给服务器发送一次请求。

但是我们使用防抖过后,我们只会发送最后一次输入事件触发的请求。

(二)使用JS实现防抖

防抖可以使用定时器+闭包实现

关于闭包可以看这个MDN上的教程:

闭包 - JavaScript | MDN (mozilla.org)

防抖其本质就是用户每执行一次输入操作就开启一个定时器,如果用户继续输入,就把前面的定时器全部清除,永远只留下最后一个定时器。

const ipt = document.querySelector("input");
// 触发输入框输入事件
ipt.addEventListener('input', debounce(() => {
    console.log("向服务器发送一次请求,内容为" + ipt.value);
}, 1000));

// 防抖函数,接收两个参数
// 一个是事件回调函数,一个是指定最后一次触发时间
function debounce(fn, delay) {
    // 定时器,使用闭包将它缓存在内存中
    let t = null;
    return function () {
        // 如果这次输入的时候检测到已经开启了定时器,就清除上一个定时器
        if (t !== null) {
            clearTimeout(t);
        }
        // 重新开启新的定时器,该定时器永远是最后一个定时器
        t = setTimeout(() => {
            // 等到定时器结束触发事件回调函数
            fn();
        }, delay)
    }
}

(三)使用Lodash实现防抖

首先需要下载和引入lodash,下面是下载Lodash的官方网址:

Lodash 简介 | Lodash中文文档 | Lodash中文网 (lodashjs.com)

这一条讲的是防抖函数的使用:

lodash.debounce | Lodash中文文档 | Lodash中文网 (lodashjs.com)

_.debounce(回调函数, 延迟时间)

const ipt = document.querySelector("input");
ipt.addEventListener('input', _.debounce(() => {
   console.log("向服务器发送请求,请求数据为:" + ipt.value);
}));

二、函数节流

(一)节流的理解

节流就是在规定的时间间隔内不会重复触发回调,只有过了这个时间间隔后才能触发回调,使用这种方法把触发频率变为少量触发。

可以理解为我们平时输入手机号获取验证码,获取验证码过后,用户在短时间内不能再获取验证码,只有等这个时间过了才能再次发送验证码。

(二)使用JS实现节流

节流也是使用定时器+闭包来实现

其本质就是使用一个变量来记录当前状态,如果我们在触发事件的时候这个变量状态是可以触发,就开启一个定时器后变为不可触发,等待定时器结束后再把状态改为可以触发。

let num = 0;
const span = document.querySelector("span");
const button = document.querySelector("button");
// 触发点击按钮num+1事件
button.addEventListener("click", throttle(() => {
    num++;
    span.innerText = num;
}, 2000))

// 节流函数,接收两个参数
// 一个是事件回调函数,一个是指定触发事件的间隔时间
function throttle(fn, delay) {
    // 记录当前事件状态,true为可以触发,false为不可触发
    let t = true;
    return function () {
        // 如果这次事件可以触发,就执行回调函数并开启一个定时器,然后将状态变为false
        // 如果点击的时候事件不可触发,则状态一直为false
        if (t) {
            fn();
            setTimeout(() => {
                // 等到定时器结束触发事件回调函数,并重新把状态调为true
                t = true;
            }, delay)
        }
        t = false;
    }
}

(三)使用Lodash实现节流

Lodash官方文档中节流函数的使用:

lodash.throttle | Lodash中文文档 | Lodash中文网 (lodashjs.com)

_.throttle(回调函数, 时间间隔)

let num = 0;
const span = document.querySelector("span");
const button = document.querySelector("button");
button.addEventListener("click", _.throttle(() => {
    num++;
    span.innerText = num;
}, 2000))

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

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

相关文章

SSM 框架整合

1 整合配置 1.1 流程 1.2 Spring 整合 MyBatis 1.3 Spring 整合 SpringMVC 1.4 配置代码 JdbcConfig.java public class JdbcConfig {Value("${jdbc.driver}")private String driver;Value("${jdbc.url}")private String url;Value("${jdbc.usern…

【挑战业余一周拿证】CSDN官方课程目录

一、亚马逊云科技简介 二、在云中计算 三、全球基础设施和可靠性 四、联网 五、存储和数据库 六、安全性 七、监控和分析 八、定价和支持 九、迁移和创新 十、云之旅 关注订阅号 CSDN 官方中文视频(免费):点击进入 一、亚马逊云科…

Apache POI(处理Miscrosoft Office各种文件格式)

文章目录 一、Apache POI介绍二、应用场景三、使用步骤1.导入maven坐标2.写入代码讲解3.读取代码讲解 总结 一、Apache POI介绍 Apache POI 是一个处理Miscrosoft Office各种文件格式的开源项目。简单来说就是,我们可以使用 POI 在 Java 程序中对Miscrosoft Office…

N7 LUP.2.3 DRC如何解决?

这个问题在Design Rule中的介绍如下图: 解决办法是od 15 um的范围要加LUP_GR* cell,需要提高密度(加的位置需要符合tcic)去fix。

ubuntu 安装 jetbrains-toolbox

ubuntu 安装 jetbrains-toolbox 官网下载 jetbrains-toolbox jetbrains 官网 jetbrains 官网:https://www.jetbrains.com/ jetbrains-toolbox 官网下载页面 在下载页面点击 Download 安装 jetbrains-toolbox 解压 jetbrains-toolbox 安装包 到指定目录 本案例将…

【Dockerfile】将自己的项目构建成镜像部署运行

目录 1.Dockerfile 2.镜像结构 3.Dockerfile语法 4.构建Java项目 5.基于Java8构建项目 1.Dockerfile 常见的镜像在DockerHub就能找到,但是我们自己写的项目就必须自己构建镜像了。 而要自定义镜像,就必须先了解镜像的结构才行。 2.镜像结构 镜…

Python——常见内置模块

Python 模块(Modules)1、概念模块函数类变量2、分类3、模块导入的方法:五种4、使用import 导入模块5、使用from……import部分导入6、使用as关键字为导入模块或功能命名别名7、模块的搜索目录8、自定义模块 常见内置模块一、math模块二、rand…

[pyqt5]PyQt5之如何设置QWidget窗口背景图片问题

目录 PyQt5设置QWidget窗口背景图片 QWidget 添加背景图片问题QSS 背景图样式区别PyQt设置窗口背景图像,以及图像自适应窗口大小变化 总结 PyQt5设置QWidget窗口背景图片 QWidget 添加背景图片问题 QWidget 创建的窗口有时并不能直接用 setStyleSheet 设置窗口部分…

手机技巧:安卓微信8.0.44测试版功能介绍

目录 一、更新介绍 二、功能更新介绍 拍一拍撤回功能 聊天设置界面文案优化 关怀模式新增了非常实用的安静模式 微信设置中新增翻译设置选项 近期腾讯官方终于发布了安卓微信8.0.44测试版,今天小编继续给大家介绍一个本次安卓微信8.0.44测试版本更新的内容&am…

网络运维与网络安全 学习笔记2023.11.26

网络运维与网络安全 学习笔记 第二十七天 今日目标 NAT场景与原理、静态NAT、动态NAT PAT原理与配置、动态PAT之EasyIP、静态PAT之NAT Server NAT场景与原理 项目背景 为节省IP地址和费用,企业内网使用的都是“私有IP地址” Internet网络的组成设备&#xff0c…

3 时间序列预测入门:TCN

0 引言 TCN(全称Temporal Convolutional Network),时序卷积网络,是在2018年提出的一个卷积模型,但是可以用来处理时间序列。 论文:https://arxiv.org/pdf/1803.01271.pdf 一维卷积:在时间步长方…

轻量应用服务器推荐,入门首选

轻量应用服务器: 配置高,价格低,高性价比,已经成为开发者和中小企业首选服务器。 轻量-爆款 腾讯云轻量应用服务器 2核2G 3M带宽 40G SSD盘 月流量200G 一月45元。 推荐理由: 腾讯云这次活动预备了多款轻量应用服务器。如果做小…

【Java基础系列】文件上传功能

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

BUUCTF刷题之路-web-[GXYCTF2019]Ping Ping Ping1

启动环境后,是一个简简单单的页面: 看样子是能够触发远程执行漏洞的。尝试下ping 127.0.0.1,如果有回显说明我们的想法是对的。 最近才学习的nc反弹shell。想着是否能用nc反弹shell的办法。控制服务器然后输出flag呢?于是我测试下…

女生儿童房装修:原木上下铺搭配粉色调。福州中宅装饰,福州装修

你是否正在为女生儿童房的装修而发愁呢?该如何让房间既适合孩子生活,又能够满足日常学习的需要呢?这里有一个精美的装修案例,或许能够为你提供一些灵感。 1️⃣ 原木上下铺 房间的上下铺采用了原木色调,带来了自然、温…

RT-DETR 更换损失函数之 SIoU / EIoU / WIoU / Focal_xIoU

文章目录 更换方式CIoUDIoUEIoUGIoUSIoUWIoUFocal_CIoUFocal_DIoUFocal_EIoUFocal_GIoUFocal_SIoU提示更换方式 第一步:将ultralytics/ultralytics/utils/metrics.py文件中的bbox_iou替换为如下的代码:class

聊一聊索引覆盖的好处

问:索引覆盖啥意思? 答:若查询的字段在二级索引的叶子节点中,则可直接返回结果,无需回表。这种通过组合索引避免回表的优化技术也称为索引覆盖(Covering Index)。在叶子节点中的包括索引字段和主…

CSDN动态发了但是主页面看不见已发的动态

问题描述: 今天在写csdn动态的时候,发了五个动态,但是主页面的“最近”看不到我发的动态,我还以为是csdn动态每天的发送量有数量限制。去这个地方点我的发现 右上角全是“审核中”的字样 按理说是不可能审核这么久的&#xff08…

OSG编程指南<十二>:OSG二三维文字创建及文字特效

1、字体基础知识 适当的文字信息对于显示场景信息是非常重要的。在 OSG 中,osgText提供了向场景中添加文字的强大功能,由于有第三方插件 FreeType 的支持,它完全支持TrueType 字体。很多人可能对 FreeType 和 TrueType 还不太了解&#xff0c…

自动化横行时代,手工测试如何突破重围?测试之路...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 自动化测试是每个…