美文网首页
防抖和节流

防抖和节流

作者: fz_log | 来源:发表于2021-06-29 17:38 被阅读0次

防抖:动作绑定事件,动作发生一定时间后触发事件,在这段时间内,如果该动作又发生,则重新等待一定时间才触发事件。(即:一个事件触发后在单位时间内,如果发生重复触发同一个事件,则取消上一次的事件调用,并重新计时)
场景:点击按钮发送请求,搜索时自动匹配,自动保存,Debouncing a resize/scroll event

//基础
function debounce(func, time){
  let timer = null;
  return () => {
 // fn.apply(this, ags)  apply分情况:=>: this指向方法内的this,如果不是=>,指向window
    timer = setTimeout(() => {
      func.apply(this, arguments)
    },time);
  }
}
//是否首次立刻执行
/**
* @description 一直调用callback,callback就不会执行
*/
function debounce(callback, timeout, immediate){
  let timer;
  return function(){
    const context = this;  //保证执行上下文
    const args = arguments;  //记录传参
    const later = function(){
      timer = null;   //重置为初始状态
      if(!immediate) callback.apply(context, args); //设置为尾部调用才延时触发
    }
    const callNow = immediate && !timer;  //如果确认允许首部调用,且首次调用,那么本次立即调用
    clearTimeout(timer);  //杀掉上次计时器,重新记时
    timer = setTimeout(later, timeout); //过了时间触发
    callNow && callback.apply(context, args);  //首次调用立即触发
    
  }
}

节流:动作绑定事件,动作发生之后一段时间后触发事件,在这段时间内,如果动作又发生,则无视该动作,直到事件执行完后,才能重新触发。(即:单位时间内,如果发生重复触发同一事件,则忽略湖面触发的事件,直到第一次的事件的计时结束)(单位时间内只能执行一次)
场景:抢票,提交数据,切换,轮播,动画

//基础
function throtte(func, time){
  let activeTime = 0;
  return () => {
    const current = Date.new();
    if(current - activeTime > time) {
      func.apply(this, arguments);
      activeTime = Date.now();
    }
  }
}
//间隔时间反转标志位
function throttle(callback, timeout){
  let disable;
  return function(){
    const context = this;
    const args = arguments;
    if(!disable){
      callback.apply(context, args);
      disable = true;
      setTimeout(_ => disable = false, timeout);
    }
  }
}
调用:
sayHi(){
  console.log("防抖");
}
debounce(sayHi, 300)

相关文章

  • 谈谈js中的节流和防抖函数

    关于节流和防抖,这篇文章说的很好了,深入lodash源码分析防抖和节流深入篇 | Lodash 防抖和节流是怎么实...

  • JavaScript防抖和节流

    1. 认识防抖和节流 1.1. 对防抖和节流的认识 防抖和节流的概念其实最早并不是出现在软件工程中,防抖是出现在电...

  • 前端性能优化-浅谈js防抖和节流

    浅谈js防抖和节流

  • Javascript 基础

    1、函数防抖和函数节流 【《javascript高级程序设计》里,函数节流是这里讲的函数防抖。】函数防抖: 在事件...

  • js 防抖 节流

    节流 防抖1 防抖2

  • 2019-03-27

    js的防抖和节流 据我所知防抖和节流都是为了优化作用,减轻浏览器和服务端的负担,防抖和节流俩个的英文要记住: de...

  • js的防抖和节流

    js的 防抖(debounce)和 节流(throttle ) 防抖和节流一般用于高频触发事件,属于浏览器性能优化...

  • 手写防抖和节流函数实现

    1. 认识防抖和节流函数 防抖和节流的概念其实最早并不是出现在软件工程中,防抖是出现在电子元件中,节流出现在流体流...

  • 实现防抖和节流

    一、认识防抖和节流函数 防抖和节流的概念其实最早并不是出现在软件工程中,防抖是出现在电子元件中,节流出现在流体流动...

  • 2019-04-24关于节流和防抖

    节流: 应用场景: 防抖: 应用场景: 1.节流 2.防抖

网友评论

      本文标题:防抖和节流

      本文链接:https://www.haomeiwen.com/subject/urkkultx.html