js节流函数

JS节流函数

1. 节流函数的定义

/*
    fn: 是真实处理事件的回调函数
    delay: 是节流时间段
*/
function throttle(fn: Function, delay: number) {
  // last为上一次触发回调的时间, timer是定时器
  let last = 0,
    timer:any = null;
  // 将throttle处理结果当作函数返回
  return function() {
    // 保留调用时的this上下文
    let context = this;
    // 保留调用时传入的参数
    let args = arguments;
    // 记录本次触发回调的时间
    let now = +new Date();
    // 判断上次触发的时间和本次触发的时间差是否小于时间间隔的阈值
    if (now - last < delay) {
      // 如果时间间隔小于我们设定的时间间隔阈值,则为本次触发操作设立一个新的定时器
      clearTimeout(timer);
      timer = setTimeout(function() {
        last = now;
        fn.apply(context, args);
      }, delay);
    } else {
      // 如果时间间隔超出了我们设定的时间间隔阈值,那就不等了,无论如何要反馈给用户一次响应
      last = now;
      fn.apply(context, args);
    }
  };
}

2. 节流函数的用法

let divEl = document.querySelector(".demo");
div.onclick = function() {
    throttle(function(){
        console.log("hello world")
    }, 1500)
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 节流函数是优化高频率执行js的一种手段oninput onkeypress onscroll onresiz...
    鲁女女阅读 4,697评论 3 0
  • 在浏览器中,会经常频繁的超控DOM,导致渲染变慢,甚至浏览器奔溃. 测试场景window对象的resize、scr...
    可惜没有如果R阅读 3,362评论 0 0
  • 前言 在《JavaScript专题之跟着underscore学防抖》中,我们了解了为什么要限制事件的频繁触发,以及...
    折枝赠远方阅读 5,099评论 0 0
  • vue实现输入框的模糊查询(节流函数的应用场景) 上一篇讲到了javascript的节流函数和防抖函数,那么我们在...
    匆匆岁月阅读 4,172评论 0 0
  • 久违的晴天,家长会。 家长大会开好到教室时,离放学已经没多少时间了。班主任说已经安排了三个家长分享经验。 放学铃声...
    飘雪儿5阅读 12,196评论 16 22