首页 > 编程语言 >JavaScript 防抖&节流

JavaScript 防抖&节流

时间:2023-08-31 15:00:08浏览次数:41  
标签:function 事件处理 防抖 节流 JavaScript 事件 函数

JavaScript的防抖(Debouncing)和节流(Throttling)是两种用于优化高频率事件处理的常见技术。它们都可以限制事件的触发频率,以减少过度触发事件处理函数而导致的性能问题。

防抖(Debouncing)

防抖是指在事件被触发后,等待一定时间再执行事件处理函数。如果在等待时间内事件再次被触发,那么就重新计时。

这样可以避免事件处理函数过于频繁地执行,只有当事件暂停一段时间后,才会真正执行一次事件处理函数。

常见的应用场景:

  • 浏览器窗口大小调整:当用户频繁调整窗口大小时,通过防抖可以避免频繁地重绘页面。
  • 搜索框输入:在用户输入时,等待用户暂停输入后再进行搜索请求,减少请求次数。

实例代码:

function debounce(func, delay) {
  let timerId;
  
  return function (...args) {
    clearTimeout(timerId);
    timerId = setTimeout(() => func.apply(this, args), delay);
  };
}

// 使用防抖包装事件处理函数
const debouncedEventHandler = debounce(function () {
  // 在这里编写事件处理逻辑
}, 300);

节流(Throttling)

节流是指在事件被触发后,固定时间内只执行一次事件处理函数。即使事件被触发多次,在规定的时间间隔内,也只会执行一次事件处理函数。

常见的应用场景:

  • 滚动事件:当用户滚动页面时,通过节流来限制处理滚动事件的频率,减少滚动事件处理函数的调用次数。
  • 点击事件:当用户快速点击按钮时,通过节流来限制点击事件处理函数的执行,防止多次点击导致的问题。

实例代码:

function throttle(func, delay) {
  let isThrottled = false;

  return function (...args) {
    if (!isThrottled) {
      func.apply(this, args);
      isThrottled = true;
      setTimeout(() => (isThrottled = false), delay);
    }
  };
}

// 使用节流包装事件处理函数
const throttledEventHandler = throttle(function () {
  // 在这里编写事件处理逻辑
}, 300);

标签:function,事件处理,防抖,节流,JavaScript,事件,函数
From: https://www.cnblogs.com/2113ic/p/17669577.html

相关文章

  • 03-JavaScript
    变量:变量的声明和赋值:使用var、let或const关键字声明变量,并赋予其一个值。基本数据类型:布尔值、数字、字符串、undefined、null等基本数据类型的概念和使用。类型的转换:数据类型之间的转换,包括显式转换和隐式转换。运算符:算术运算符、比较运算符、逻辑运算符、赋值......
  • ArcGIS for javascript 加载天地图瓦片
    ArcGISforjavascript(4.27)加载天地图瓦片importMapfrom"@arcgis/core/Map";importMapViewfrom'@arcgis/core/views/MapView';importWebTileLayerfrom'@arcgis/core/layers/WebTileLayer';constvecLayer=newWebTileLayer('ht......
  • ArcGIS Javascript sdk中API keys 的说明
    ArcGISJavascriptsdk中APIkeys的说明关于ArcGIS的APIkey具体使用ArcGIS有那些底图用到了APIkeys,那些没有用到可以参考下面表格,最新改动请参考官网BasemapsforusewithAPIkeysUseofthesebasemapsrequiresanArcGISDevelopersubscription.Tolearnmoreabout......
  • JavaScript 中的变量声明与赋值
    在计算机编程中,使用名称(或标识符)来表示值是最基本的技术之一。将名称与值绑定为我们提供了一种在程序中引用值并利用它们的方式。当涉及到绑定名称与值时,我们通常称之为将值赋给变量。术语“变量”暗示了新的值可以被赋给它,这意味着与变量关联的值在程序执行过程中可能会改变。如......
  • href="javascript:void(0)
    href="javascript:void(0);"是一种在HTML中使用JavaScript的常见方法之一。它用于将链接的点击操作关联到一个JavaScript动作或函数,而不是实际跳转到一个新的URL。在某些情况下,您可能想要在链接被点击时执行一些JavaScript代码,而不是加载一个新的页面。在这种情况下,您......
  • 20 JavaScript和HTML交互
    20JavaScript和HTML交互在HTML中可以直接在标签上给出一些事件的触发.例如,页面上的一个按钮.<inputtype="button"value="点我"/>我们能够知道此时在页面中会产生一个按钮.但是该按钮无论如何进行点击.都不会触发任何事件.但,此时我要告诉你,人家其实触发了.只是......
  • javascript学习笔记day7
    今天学了挺多新东西的,在学校教的东西都是很老了东西了,果然互联网完全真能靠自学,下面是今天的笔记varletconst优先使用const,即不会改变的变量,假设后续发现这个变量会改变就再使用letconsole.log打印属性console.dir打印信息innerText只修改标标签内容不解析标签innerHTML识......
  • 19 JavaScript的hook
    19JavaScript的hook什么叫hook?Hook技术又叫钩子函数,在系统没有调用该函数之前,钩子程序就捕获该消息,钩子函数先得到该函数的控制权,这时钩子函数既可以改变该函数的执行行为,还可以强制结束消息的传递,简单来说。就是把系统的程序拉出来,来变成我们自己执行的片段。我们可以控制执行......
  • 18 JavaScript中的三元运算
    18JavaScript中的三元运算先来看一个例子:leta=10;letb=20;letd=a>b?a:bconsole.log(d); //20三元运算语法:条件表达式?A:B说明:当条件表达式为True,运算后的结果为A,否则结果为B。接下来在看一个恶心的:leta=10;letb=20;letc=5;letd=17......
  • javascript中parseInt的问题
    今天遇到一个有趣的问题,就是在用javascript的parseInt函数时,parseInt("08")或者parseInt("09")返回的居然是0,而parseInt("01")...parseInt("07")都是正确的,一开始很难理解,后来发现出现这个问题的原因是当在前面有"0"时,javascript会认为这是一个八进制数,而"08"和"09"不是一个合法......