zoukankan      html  css  js  c++  java
  • 防抖函数

     1 /**
     2  * 防抖函数
     3  * @param {*} func 防抖后要执行的回调
     4  * @param {*} wait 等待时间
     5  * @param {*} immediate 
     6  */
     7 function debounce(func, wait, immediate) {
     8   let timeout, args, context, timestamp, result;
     9 
    10   const later = function () {
    11     // 距上一次触发时间间隔
    12     const last = +new Date() - timestamp;
    13 
    14     // 上次被包装函数被调用时间间隔last小于设定时间间隔wait
    15     if (last < wait && last > 0) {
    16       timeout = setTimeout(later, wait - last);
    17     } else {
    18       timeout = null;
    19       // 如果设定为immediate===true,因为开始边界已经调用过了此处无需调用
    20       if (!immediate) {
    21         result = func.apply(context, args);
    22         if (!timeout) context = args = null;
    23       }
    24     }
    25   };
    26 
    27   return function (...args) {
    28     context = this;
    29     timestamp = +new Date();
    30     const callNow = immediate && !timeout;
    31     // 如果延时不存在,重新设定延时
    32     if (!timeout) timeout = setTimeout(later, wait);
    33     if (callNow) {
    34       result = func.apply(context, args);
    35       context = args = null;
    36     }
    37 
    38     return result;
    39   };
    40 }
  • 相关阅读:
    将博客搬至CSDN
    HDU1175 + HDU1728+BFS转弯
    HDU1401 BFS
    HDU1401 双广BFS
    分布式一致性
    GFS架构分析
    云计算资源分享与下载
    mysql导入导出数据方法
    缓存设计的一些思考
    HBase性能优化方法总结
  • 原文地址:https://www.cnblogs.com/langmohua/p/13772943.html
Copyright © 2011-2022 走看看