首页 > 其他分享 >91.介绍一下js的节流与防抖

91.介绍一下js的节流与防抖

时间:2023-07-14 23:12:29浏览次数:50  
标签:触发 防抖 节流 timer js 事件 91 函数

91. 介绍一下 js 的节流与防抖?

相关知识点:

// 函数防抖: 在事件被触发 n 秒后再执行回调,如果在这 n 秒内事件又被触发,则重新计时。

// 函数节流: 规定一个单位时间,在这个单位时间内,只能有一次触发事件的回调函数执行,如果在同一个单位时间内某事件被触发多次,只有一次能生效。

// 函数防抖的实现
function debounce(fn, wait) {
  var timer = null;

  return function () {
    var context = this,
      args = arguments;

    // 如果此时存在定时器的话,则取消之前的定时器重新记时
    if (timer) {
      clearTimeout(timer);
      timer = null;
    }

    // 设置定时器,使事件间隔指定事件后执行
    timer = setTimeout(() => {
      fn.apply(context, args);
    }, wait);
  };
}

// 函数节流的实现;
function throttle(fn, delay) {
  var preTime = Date.now();

  return function () {
    var context = this,
      args = arguments,
      nowTime = Date.now();

    // 如果两次时间间隔超过了指定时间,则执行函数。
    if (nowTime - preTime >= delay) {
      preTime = Date.now();
      return fn.apply(context, args);
    }
  };
}

回答:

函数防抖是指在事件被触发 n 秒后再执行回调,如果在这 n 秒内事件又被触发,则重新计时。这可以使用在一些点击请求的事件上,避免因为用户的多次点击向后端发送多次请求。

函数节流是指规定一个单位时间,在这个单位时间内,只能有一次触发事件的回调函数执行,如果在同一个单位时间内某事件被触发多次,只有一次能生效。节流可以使用在 scroll 函数的事件监听上,通过事件节流来降低事件调用的频率。

详细资料可以参考:
《轻松理解 JS 函数节流和函数防抖》
《JavaScript 事件节流和事件防抖》
《JS 的防抖与节流》

标签:触发,防抖,节流,timer,js,事件,91,函数
From: https://www.cnblogs.com/zhuoss/p/17555296.html

相关文章

  • 66.ES6模块与CommonJS模块、AMD、CMD的差异
    66.ES6模块与CommonJS模块、AMD、CMD的差异。1.CommonJS模块输出的是一个值的拷贝,ES6模块输出的是值的引用。CommonJS模块输出的是值的拷贝,也就是说,一旦输出一个值,模块内部的变化就影响不到这个值。ES6模块的运行机制与CommonJS不一样。JS引擎对脚本静态分析的时候......
  • Json.NET反序列化漏洞生成Ysoserial攻击Payload
    Ysoserial.Net只提供序列化之后的Payload主体,具体执行的命令从外部输入,实现代码清单如下Stringpayload=@"{    '$type':'System.Windows.Data.ObjectDataProvider,PresentationFramework,Version=4.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35',  ......
  • EaselJS 源码分析系列--第一篇
    什么是EaselJS?事儿还得从Flash说起,因为我最早接触的就是Flash,从Flash入行编程的Flash最早的脚本是Actionscript2.0它的1.0我是没用过。Actionscript2.0与Javascript非常像(es3时代的Javascript)后来又推出了完全面向对象的Actionscript3.0而毕业后的我也......
  • jsconfig.json文件作用
    没搞懂具体是个啥,目前知道有两个作用1. 别名路径提示{"compilerOptions":{"target":"esnext",//覆盖vscode的CheckJS选项"checkJs":false,"strict":true,"allowSyntheticDefaultImports":true,&......
  • 深入浅出WPF——P91把子集集合的元素当Path
    publicpartialclassMainWindow:Window{publicMainWindow(){InitializeComponent();List<Country>countryList=newList<Country>(){newCountry......
  • 记录--再也不用手动改package.json的版本号
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助本文的起因是有在代码仓库发包后,同事问我“为什么package.json里的版本还是原来的,有没有更新?”,这个时候我意识到,我们完全没有必要在每次发布的时候还特意去关注这个仓库的版本号,只要在发布打tag的时候同步一下即......
  • P1891 疯狂 LCM 题解
    一、题目描述:$T$ 组数据,每组数据给定$n$,求$\sum_{i=1}^{n}lcm(i,n)$数据范围:$1\leT\le3\times10^5,1\len\le1\times10^6$。 二、解题思路:个人觉得思维难度不大,只是要记住一个结论:$\sum_{d\midn}d=\frac{\varphi(n)\timesn}{2}$这个公式对......
  • NestJs 集成 OIDC
    要将OIDC集成到NestJS中,可以按照以下步骤进行操作:首先,确保已经安装了@nestjs/passport和passport这两个依赖包,以便使用Passport和OIDC策略。npminstall--save@nestjs/passportpassport然后,安装用于OIDC的Passport策略包。这里以passport-openidconnect......
  • EF Core 7.0 – JSON Column
    @@EFCore7json列 前言SQLServer支持JSON,以前写过一篇介绍SQLServer–WorkwithJSON. 但EFCore一直没有支持。直到EFCore7.0才支持。EFCore7包含对JSON列的提供程序无关的支持,以及SQLServer的实现。此支持允许将从.NET类型生成的聚合映射到......
  • 【JavaScript】js 处理复制函数实现
    exportconstcopyText=(text:string)=>{constinput=document.createElement('input');input.setAttribute('readonly','readonly');input.setAttribute('value',text);document.body.appendChild(input);......