首页 > 其他分享 >防抖与节流

防抖与节流

时间:2022-09-28 19:12:41浏览次数:54  
标签:function 触发 防抖 节流 args let timeout

防抖与节流

这两个应该是前端在函数中非常经典且常见的用法了
接下来就简单介绍一下:

1.防抖

目的是为了避免多次重复触发该函数,有且仅有只触发最后一次事件,通俗讲就是点很多下,只触发你最后一次点的,前面的都作废。

应用场景:搜索框的输入后触发的自动搜索、窗口大小的变化......
 function debounce(fn, wait, immediate) {
    let timeout;
    return function () {
      let context = this;
      let args = arguments;
      if (timeout) {
        clearTimeout(timeout);
      }
      if (immediate) {
        let runNow = !timeout; //首次立即执行,然后当事件再次执行时才触发
        timeout = setTimeout(function () {
          timeout = null;
        }, wait);
        if (runNow) {
          fn.apply(context, args);
        }
      } else {
        timeout = setTimeout(function () {
          fn.apply(context, args);
        }, wait);
      }
    };
  }

2.节流

目的是为了控制触发的频率,有且仅有在规定时间内只触发第一次事件,通俗讲就是在自己设定的单位时间内,只触发首次点击的,接下来的点击都作废,必须等到下一个单位时间的到来。

应用场景:滚动加载、重复提交表单......
 function throttle(fn, deplay) {
    let timer = null; //记录上次的定时器
    let startTime = Date.now();
    return function () {
      let curTime = Date.now(); //当前时间
      let remain = deplay - (curTime - startTime); //距离下个单位时间还有多久
      let context = this;
      let args = arguments;
      clearTimeout(timer);
      if (remain <= 0) {
        fn.apply(context, args);
        startTime = Date.now();
      } else {
        timer = setTimeout(fn, remain);
      }
    };
  },

标签:function,触发,防抖,节流,args,let,timeout
From: https://www.cnblogs.com/yiheng-orange/p/16739262.html

相关文章

  • Python字节流,字符串,16进制相互转换
    python版本:Python3.81.字节流转成字符串2.字符串变字节流3.16进制字节流变成字节流4.16进制字符串变成字符串字节流 ......
  • 常见的js问题 this指向问题,箭头函数和回调函数 跨域问题 节流和防抖 虚拟DOM
    1.对this指向的理解  2.箭头函数回调函数和rgba的使用 3.常见的跨域方式 4.虚拟DOM 5.函数的节流和防抖 ......
  • JS 闭包&防抖&节流
    一、函数防抖防抖 防抖、节流使用的闭包,一个页面调用多次防抖节流,独立空间  防抖概念: 用户触发事件过于频繁,只需要处理最后一次事件的操作functiondebounce(......
  • 节流
    functionthrottle(fn,delay){letlast=0//上次触发时间returnfunction(...args){constnow=Date.now()if(now-last>delay){las......
  • 防抖
     functiondebounce(fn,delay){lettimerreturnfunction(...args){if(timer){clearTimeout(timer)}timer=setTimeout(()=>{......
  • 字节流
    FileInputStream和FileOutputStream的使用一,使用字节流FileInputStream处理文本文件(可能异常)使用同一套结构构建代码:@TestpublicvoidtestFileInputStream(){......
  • 防抖、节流 函数
    节流functionthrottle(fn,interval){letenterTime=0//触发的时间constgapTime=interval||1000//间隔时间,如果interval不传,则默认1000msreturnf......
  • vue中防抖函数的写法以及用法
    1.准备好防抖函数functiondebounce(func,wait){lettimeout;returnfunction(...args){if(timeout)clearTimeout(timeout);l......
  • 节流与防抖
    防抖:在频繁触发事件时,事件只执行一次,并且是最后一次触发的时候主要思想:给需要触发业务代码加上一个定时器,并且如果在定时器设定的时间内,该业务代码再次被触发,则清除上一次......
  • ng zorro Select 异步频繁请求数据进行节流控制
        思路:每次搜索框输入改变,先清除上一次的延时请求,本次请求延时(某种程度上等待用户输入完成后请求数据)......