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 }
  • 相关阅读:
    C++中的ravalue学习笔记
    C++中的抽象类
    C++中的显式类型转换
    C++中的继承和多继承
    C++中的多态
    Yocto学习笔记
    HIDL学习笔记
    hadoop2.5搭建过程
    《Redis设计与实现》学习笔记
    40 数组中只出现一次的数字
  • 原文地址:https://www.cnblogs.com/langmohua/p/13772943.html
Copyright © 2011-2022 走看看