简述:js的防抖功能大家都比较熟悉,这里重新给大家详细的介绍一下js防抖函数的解析与应用。防抖就是某一高频事件不断被触发时,仅在最后一次真正执行事件处理代码,将多次执行变为最后一次执行,具体点就是我们在触发高频事件后,n秒内函数只会执行一次,如果n秒内高频事件再次被触发,则重新计算时间。其实,防抖和节流都是防止函数多次调用。

JavaScript防抖函数详解

防抖函数是JavaScript中常用的一种函数优化技术,可以有效减少一些高频率触发的事件所带来的性能问题。本文将详细介绍JavaScript防抖函数的实现原理、应用场景和使用方法。

一、防抖函数的实现原理?

防抖函数的实现原理非常简单,就是在一定时间内只执行最后一次触发的事件,忽略之前触发的所有事件。具体实现方法如下:

1.设置一个定时器,当触发事件时,如果定时器存在,则清除定时器。

2.重新设置一个定时器,延迟一定时间后执行事件。

3.如果在延迟时间内再次触发事件,则重复1和2的步骤。

4.如果延迟时间到了,执行事件。

二、防抖函数的应用场景?

防抖函数适用于一些高频率触发的事件,比如:

1.输入框实时搜索,避免频繁请求后端接口。

2.浏览器窗口resize事件,避免频繁触发DOM操作。

3.滚动条滚动事件,避免频繁更新DOM。

4.按钮点击事件,避免重复提交表单。

三、防抖函数的使用方法?

1.手写实现防抖函数

可以通过手写实现防抖函数,代码如下:

//HTMl
<body>  <button>提交</button>
</body>//JavaScript
<script>// 首先使用querySelector方法获取按钮元素const btn = document.querySelector("button");// 定义提交操作函数function payMoney() {console.log("付款成功");}// 定义防抖函数// fn: 点击按钮要执行的函数// delay: 延迟时间function debounce(fn, delay) {// 设置定时器标识(写在return函数外面,方便下面内部函数获取)let timer;// 返回函数,不然调用debounce会立即执行此函数return function() {// fn指定thislet context = this;// fn参数let args = arguments;// 先清除定时器clearTimeout(timer);//设置定时器timer = setTimeout(() => {// 调用函数fn.apply(context, args);}, delay);}}// 给按钮添加点击监听事件,点击时,执行debounce函数btn.addEventListener("click", debounce(payMoney, 1000))
</script>//JavaScript防抖核心代码
<script>function debounce(fn, delay) {let timer = null;return function() {clearTimeout(timer);timer = setTimeout(() => {fn.apply(this, arguments);}, delay);}}
</script>

 这样用户在频繁点击按钮时,就可以执行延迟操作,防止函数多次调用,完成防抖功能;

手写实现防抖函数注意事项:
(1)、debounce函数不能直接调用fn函数,因为按钮绑定的事件函数是直接调用的,所以使用返回函数,否则函数会立即执行;

(2)、每次点击先清除延时操作,clearTimeout不能清除一个没有定义的变量名,所以需要先定义一个变量timer用来清除和定义延时操作;

(3)、在函数外层定义timer,函数内部方便使用,让这些独立的执行函数有联系;

(4)、调用函数fn,容易忽略this指向,需要将this指向调用者。

2.Lodash库实现防抖函数

Lodash是一个非常流行的JavaScript工具库,它提供了许多方便的函数,包括防抖函数。可以通过Lodash库来实现防抖函数,代码如下:

npm install -save lodash    /    npm install lodash import debounce from 'lodash/debounce';function handleInput(event) {// 在250ms内只执行最后一次输入
}const debouncedInput = debounce(handleInput, 250);
input.addEventListener('input', debouncedInput);

四、防抖函数的注意事项

1.防抖函数的延迟时间需要根据实际情况设置,设置过短可能会导致事件被频繁触发,设置过长可能会影响用户体验。

2.防抖函数返回的是一个新函数,所以需要将其赋值给原来的函数。

3.防抖函数的this指向需要明确,可以使用箭头函数或者bind方法来解决。

总之,防抖函数是一种非常实用的JavaScript函数优化技术,能够有效减少一些高频率触发的事件所带来的性能问题,提高网站的用户体验。

感觉有用,就一键三连,感谢(●'◡'●)

JavaScript防抖功能(js防抖函数,防抖功能的应用与解析,手把手教学)相关推荐

  1. JS防抖函数实现及应用

    一.什么是防抖函数: 防抖函数是指事件多次不间断触发,在一定时间内没有再触发时,执行最后一次触发的事件函数. 举个栗子,你每天给你女神送牛奶,女神从未响应过你的好意,但当你一段时间没有送牛奶时,女神就 ...

  2. JavaScript | 益智类数字棋牌小游戏,无游戏框架,浏览器直接运行JavaScript(js)小游戏【源码+解析】

    游戏界面 曾几何时想有一款自己编写的游戏,通过不断学习,终于掌握了一点JavaScript基础,捣鼓了一个益智类的数字棋牌游戏,没有使用任何游戏框架,就简单使用HTML做布局,CSS做动画,JavaS ...

  3. Javascript防抖函数节流函数的介绍(最详细)、彻底搞懂防抖节流的区别以及使用第三方库的防抖节流函数

    文章目录 1.防抖节流函数介绍 1.1 认识防抖节流函数 1.2 认识防抖函数 1.3 防抖函数应用 1.4 认识节流函数 1.5 节流函数应用 1.6 生活中的例子 2.Underscore库 2. ...

  4. 【JavaScript】JS的变量、数组、计算器案例、函数、类、常用对象的方法

    目录 01-js-js的声明和引入 <!DOCTYPE html> <html><head><meta charset="UTF-8"&g ...

  5. js基础--javascript基础概念之函数

    js基础--javascript基础概念之函数 引用w3c介绍: 函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块. JavaScript 函数语法 函数就是包裹在花括号中的代码块,前面使用 ...

  6. js 防抖是什么 JavaScript防抖怎么用

    JS防抖其实也是用来提升网页性能的一种技术写法 防抖就是指当用户触发某个操作时,如果在指定的时间内再次触发该操作,那么就清除前面触发的操作,直到用户操作之后并且在指定的时间内不再操作我们再处理用户的请 ...

  7. js实现输入框防抖功能

    1.js防抖 防抖主要是用在输入框用输入输入触发一些请求,搜索一些数据,为了减少请求次数优化性能而采取的措施. 解决的问题:高频的事件操作带来了函数的多次调用影响性能. 原理:在一定的时间间隔N秒后才 ...

  8. php加密js函数输出,PHP加密函数 Javascript/Js 解密函数的实现方法

    这篇文章主要为大家详细介绍了PHP加密函数 Javascript/Js 解密函数的实现方法,具有一定的参考价值,可以用来参考一下. 感兴趣的小伙伴,下面一起跟随512笔记的小玲来看看吧! 以下函数代码 ...

  9. java调用js匿名函数参数,JavaScript匿名函数、自执行匿名函数

    1. 函数也是一种类型 要理解匿名函数,首先需要理解函数也是一种类型. 所以函数可以赋值给变量,如下: // 将数字类型值赋给变量 var num = 1; // 将函数类型值赋给变量 var hel ...

最新文章

  1. SQL SERVER 2008 创建,删除,添加表的主键
  2. Android TableLayout 常用的属性介绍及演示
  3. 超重磅 | 神策数据“两云一平台”上线,拥抱数字化经营
  4. C++kruskals算法生成最小协议树(附完整源码)
  5. android 测试 大赛,轻量级android应用自动测试工具-2017全国大学生软件测试大赛.pdf...
  6. fullcalendar 显示的时间间隔只有四十五分钟_【体能新视点】——女子篮球运动员比赛期间的心率、血乳酸浓度和时间运动分析...
  7. vim grep配置及使用
  8. 使用EasyPoi轻松导入导出Excel文档
  9. 九、Oracle学习笔记:聚合函数
  10. echart制作环形图
  11. tensorflow 77 tensorflow android版本demo win10 下 编译
  12. 手机局域网关闭计算机的方法,用手机控制电脑关机 方法介绍【图文】
  13. 计算机屏幕上一致出现菜单解锁,解决方法:如何解锁计算机显示器菜单
  14. 松山湖云计算机中心,【东莞唯一】中科院云计算中心被点赞,松山湖又又又亮了!...
  15. 老毛桃PE系统,迁移系统机械到固态硬盘
  16. 大厂面试题刷屏:一头牛重800kg,一座桥承重700kg,牛如何过桥?
  17. Win10设置分屏功能
  18. arm鲲鹏服务器和x86区别
  19. 色阶的中间调调节原理之一
  20. 【SEMrush教程】SEO关键词魔法工具使用技巧

热门文章

  1. 恐怖黎明稳定服务器,恐怖黎明服务器不匹配 | 手游网游页游攻略大全
  2. python 元类与装饰器
  3. 这20个机械键盘,敲代码贼爽!送了
  4. MATLAB int16 int32 int64注意事项
  5. 全球与中国iOS POS终端市场深度研究分析报告
  6. oracle dba_users,dba_users字典以及用户管理
  7. android日程表实现---仿滴答清单
  8. 虚拟机使用宿主机的网络Proxy
  9. 我的世界java版怎么用结构方块_结构方块怎么用 我的世界结构方块使用方法-游侠网...
  10. 【Python】2.3绘制等边三角形