JS的防抖函数理解、手动封装

2023-11-13

1. 认识防抖函数

  • 当事件触发时,相应的函数并不会立即触发,而是会等待一定的时间;
  • 当事件密集触发时,函数的触发会被频繁的推迟;
  • 只有等待了一段时间也没有事件触发,才会真正的执行响应函数;

举个例子,防抖函数的引用场景:

  • 输入框中频繁的输入内容,搜索或者提交信息; 
  • 频繁的点击按钮,触发某个事件;
  • 监听浏览器滚动事件,完成某些特 定操作;
  • 用户缩放浏览器的resize事件;

在输入框频繁输入内容时,并不会输入一次就触发一次对应需要的操作,而是等待一定时间,待用户在这段时间内没有输入时,才会触发事件,就是通过防抖函数,实现在输入等待一段时间后,触发事件,不会频繁触发输入框的输入事件,这样很浪费性能,造成服务器的请求压力;

手写简单实现防抖函数:

function debounce(fn, delay) {
  // 定义一个定时器,保存上一次的定时器
  let timer = null
  const _debounce = function (...args) {
    // 取消上一次的定时器
    if(timer) clearTimeout(timer)
    // 延迟执行
    timer = setTimeout(() => {
      // 外部传入的真正要执行的函数
      fn.apply(this, args)
    }, delay)
  }
  return _debounce
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JS的防抖函数理解、手动封装 的相关文章

  • Sequelize.js 中的自定义或覆盖连接

    我需要使用创建自定义连接条件Sequelize js http sequelizejs com使用 MSSQL 具体来说 我需要加入TableB基于一个COALESCE中的列的值TableA and TableB并最终得到这样的连接条件 L
  • 正则表达式中的“g”标志是什么意思?

    的含义是什么g正则表达式中的标志 之间有什么区别 g and g用于全局搜索 这意味着它将匹配所有出现的情况 通常你还会看到i这意味着忽略大小写 参考 全局 JavaScript MDN https developer mozilla or
  • 是否可以在没有 Javascript(仅 CSS)的情况下执行相同的操作(悬停效果)?

    我正在尝试创建一个带有图标的按钮像这样 http jsfiddle net pRdMc HTML div div class icon div span Send Email span div CSS button width 270px
  • Google reCaptcha 永远加载

    我在我的网站上使用 Google 的 reCaptcha 2 0 它曾经运行良好 但自从我向公众开放我的网站并获得了更多用户后 recaptcha 不再适用于大多数用户 它加载得很好 但一旦用户单击 我不是机器人 复选框 它会永远加载并且从
  • 如何通过aws-sdk(javascript或node)获取s3存储桶大小

    我尝试使用 javascript nodejs aws sdk 查找 获取 s3 存储桶信息 但没有找到这样的 api 如何通过 aws sdk javascript 或 node api 获取 s3 存储桶大小 信息 每天一次向 Clou
  • 使用 jQuery / .data() 避免内存泄漏

    我正在使用 jQuery 动态创建 HTML 元素 现在需要针对它们存储 JavaScript 数据 但是 我现在担心内存泄漏 因为我实际上从未在对象上调用 删除 我 append 和 detach 它们 但从不 remove jQuery
  • 在 Javascript 中本地化字符串

    我目前正在使用 resx文件来管理我的 NET 服务器端资源 我正在处理的应用程序还允许开发人员将 JavaScript 插入各种事件处理程序中以进行客户端验证等 对我来说本地化 JavaScript 消息和字符串的最佳方法是什么 理想情况
  • 如果浏览器在 asp .net 中关闭,请从浏览器中注销?

    我的要求有点复杂 用户正在使用 Web 浏览器访问数据库 而在访问数据库时 如果用户关闭活动页面而不是注销会话 该会话需要自动注销 有人可以指导我如何做这个吗 我在母版页中使用了jquery onbeforeunload 我收到消息离开页面
  • 动态表中每个按钮的 Jquery-Ui 对话框表单

    我正在生成一个 HTML 表 每行都有一个按钮 必须打开 Jquery ui 对话框表单 The table table class table table reporting table condensed table striped t
  • 获取请求的客户端 IP 地址而不是 Cloudflare 的 IP 地址

    Cloudflare 会更改传入请求的 IP 地址 因为 Cloudflare 是我的网站和互联网之间的中间件 代理 我该怎么办获取请求的初始IP地址 而不是 Cloudflare 的 IP 地址 我听说过mod cloudflare但是这
  • 卸载/销毁 Angular 延迟加载组件

    我的设置与此处找到的帖子类似http ify io lazy loading in angularjs http ify io lazy loading in angularjs 处理 Angular 中我的应用程序的各种组件的延迟加载 我
  • 在 JavaScript 中定位提示弹出窗口

    我有一个如下所示的 JavaScript 提示 我想将提示放在屏幕中心 如何使用 javascript 做到这一点 function showUpdate var x var name prompt Please enter your na
  • TRACKER:错误TRK0005:无法找到:“CL.exe”。该系统找不到指定的文件

    我尝试在 Windows 8 上的 Node js 项目中执行以下命令 npm 安装 电子邮件受保护 cdn cgi l email protection 但我收到一个错误 我不知道如何处理 TRACKER 错误TRK0005 无法找到 C
  • EJS在JS onload函数中访问express变量

    我知道你可以像这样获取 ejs 文件中变量的值 h1 h1 如果我要在同一个 ejs 页面的 onload javascript 函数中使用相同的标题变量 我将如何使用它 例如 这个函数产生一个控制台错误说 未捕获的语法错误 意外的标识符
  • 在 php、ajax 或 javascript 中加载进度?

    任何人都知道如何在系统仍在服务器端获取数据的同时在客户端显示加载进度以及完成的百分比 例如 当我在客户端按下 确定 按钮时 它会调用服务器端从数据库收集数据 整个过程可能需要2到3分钟 如何在客户端显示加载进度 大约加载完成了多少 我怎样才
  • AngularJS 输入字段未从控制器内的 setTimeout 更新

    我正在使用 AngularJS 支持的页面 并且我需要在只读输入文本字段内显示正在运行的时钟 与data ng model 为了模拟运行的时钟 我使用了 JavaScript 调度程序setTimeout每 1000 毫秒调用一个函数 该函
  • 删除 Laravel Mix 中的临时文件

    我想在 laravel mix 构建期间或之后删除临时构建文件 这是我目前拥有的一些代码 但是del不工作 const mix require laravel mix const del require del compile sass i
  • Phonegap facebook 插件:android 的各种问题

    我正在尝试将 Phonegap 3 1 与 Phonegap facebook plugin 集成 以使我的应用程序能够使用 facebook 登录 https github com phonegap phonegap facebook p
  • Javascript:更改输入值时设置光标位置

    当您输入公式时 我试图在我的应用程序中重现类似于 Microsoft Excel Google Sheets 的用户体验 并且您可以使用不同的公式和变量来自动完成下拉菜单 为此 在验证自动完成功能后 我希望能够控制光标的位置 例如 如果我输
  • openssl_pkey_get_details($res) 不返回公共指数

    我在用着这个例子 https stackoverflow com a 12575951 2016196使用 php 生成的密钥进行 javascript 加密openssl图书馆 但是 details openssl pkey get de

随机推荐

  • DEBUG

    UnicodeDecodeError utf 8 codec can t decode byte 0x80 in position 3131 invalid start byte解决办法 阿里drl binpacking使用TensorFl
  • paddlenlp调用ERNIE、使用ERNIEKIT

    目录 paddle调用ERNIE 安装paddle和paddlenlp 下载 加载ERNIE预训练模型 tokenizer 获取文本语义特征向量表示 ERNIEKIT实践 安装 配置nltk 下载ERNIEKIT源码 运行ERNIEKIT
  • C#的基础语法---15种基本数据类型

    1 c 的基本单元是class class 类 即指同一类对象的抽象化概念 类里面的所有东西叫做类成员 属性 方法 事件 2 属性类型 C 中的数据类型一共15种 整数型 8种 位 代表整数的取值范围 2的位数次方 求出来 1就是最大值 符
  • 深入浅出讲解IDS(入侵检测系统)

    一 什么是IDS IDS是英文 intrusion Detection Systems 的缩写 中文意思是 入侵检测系统 入侵检测系统 是一种对网络传输进行即时监视 在发现可疑传输时发出警报或者采取主动反应措施的网络安全设备 专业上来讲 I
  • 我的创作纪念日-学习不止,笃行不怠

    机缘 平时的学习都会看很多视频教程 有一些会带ppt或者文稿 很多都没有 基本上都是猴子搬玉米 边学边忘 缺乏总结 就想尝试在CSDN上边学边记录 做总结 效果不错 在 CSDN 上学习并记录总结的具体方法如下 注册 CSDN 账号并登录
  • wsl2 安装ubuntu已经开启vt(虚拟化)仍然报错0x80370102

    一条命令 Enable WindowsOptionalFeature Online FeatureName VirtualMachinePlatform
  • 丰田一页纸极简思考法excel1+logic3

    公司书柜中无意get到的 因为当时对 思维 比较感兴趣 然后这本本图表内容多 书薄字少 就想着借出来看了 中午饭空的时间用了大概一个小时的样子 可以读一大半 废话了这么多 分享下这本书的内容吧 在丰田公司 有一个不成文的要求 不论是会议纪要
  • C语言中setjmp和longjmp函数

    C语言中setjmp和longjmp函数 setjmp和longjmp是C语言独有的 只有将它们结合起来使用 才能达到程序控制流有效转移的目的 按照程序员的预先设计的意图 去实现对程序中可能出现的异常进行集中处理 先来看一下这两个函数的定义
  • truncate mysql批量删除表的数据

    模板拼接执行语句 SELECT CONCAT truncate TABLE table schema TABLE NAME FROM INFORMATION SCHEMA TABLES WHERE table schema IN db na
  • 一文读懂如何配置Linux权限

    配置 var tmp fstab权限 Linux中权限是指控制用户或进程对文件或目录的访问 修改或执行的权限 Linux中有3种权限 读取权限 read 写入权限 write 执行权限 execute 权限是用数字表示的 有三位 每一位表示
  • Unity 控制摄像机镜头的上下左右移动

    private float FollowPosx FollowPosy private float moveAmount 5 控制镜头的移动速度 Update is called once per frame void Update if
  • linux 线程优先级设置

    include
  • 用iframe完美嵌入

  • SpringBoot秒杀系统实战13-秒杀商品详情页+秒杀倒计时功能实现

    程序鹏 于 2020 05 08 00 00 00 发布 1326 收藏 4 分类专栏 Spring Boot 秒杀系统 文章标签 java spring boot web 版权 Spring Boot 同时被 2 个专栏收录 29 篇文章
  • LeetCode【28】实现 strStr()

    题目 实现 strStr 函数 给定一个 haystack 字符串和一个 needle 字符串 在 haystack 字符串中找出 needle 字符串出现的第一个位置 从0开始 如果不存在 则返回 1 示例 1 输入 haystack h
  • 使用Python的requests库发送HTTPS请求时的SSL证书验证问题

    问题描述 使用python的requests库去发送https请求 有时候不设置verify False不报错 有时候又报错 问题原因 使用Python的requests库发送HTTPS请求时 设置verify False参数可以跳过SSL
  • java设置有时效的变量_java设置全局变量

    图片来源于网络 如有侵权请联系删除 前言 java系统自带的api很多 而设置全局变量也是有在System对象中一个具体的方法 而Springboot启动类一层层递进的过程中就有使用该方法来存储全局变量 1 实例 在Springboot中的
  • MAC Unity安装教程

    缘起 这边app要做一个简单调研 验证是否可以利用unity改善app中h5页面需要展示的3d和复杂报表效果 于是就此开始了调研 这边只是想简单将unity集成到工程中 然后想办法嵌入h5来进行展示测试 安装地址 https unity3d
  • Java:字符串中a出现的次数

    1 问题描述 求字符串 abcguegduauwdakolaa 中a出现的次数 2 题解 2 1 题解一 思路 每次返回当前下标 使用indexOf求当前下标的后一位到字符串结束出现的第一个a的下标 String s abcguegduau
  • JS的防抖函数理解、手动封装

    1 认识防抖函数 当事件触发时 相应的函数并不会立即触发 而是会等待一定的时间 当事件密集触发时 函数的触发会被频繁的推迟 只有等待了一段时间也没有事件触发 才会真正的执行响应函数 举个例子 防抖函数的引用场景 输入框中频繁的输入内容 搜索