zoukankan      html  css  js  c++  java
  • JS频率控制函数

     1 /**
     2  * 频率控制 返回函数连续调用时,fn 执行频率限定为每多少时间执行一次
     3  * @param  {Function}   fn        需要调用的函数
     4  * @param  {Number}     delay     延迟时间,单位毫秒
     5  * @param  {Boolean}    immediate 给immediate参数传递false绑定的函数先执行,而不是delay后后执行。
     6  * @param  {Boolean}    debounce  是否使用debounce
     7  * @return {Function}             实际调用函数
     8  */
     9 var throttle = function(fn, delay, immediate, debounce) {
    10     var curr = +new Date(), //当前事件
    11         last_call = 0,
    12         last_exec = 0,
    13         timer = null,
    14         diff, //时间差
    15         context, //上下文
    16         args,
    17         exec = function() {
    18             last_exec = curr;
    19             fn.apply(context, args);
    20         };
    21     return function() {
    22         curr = +new Date();
    23         context = this,
    24             args = arguments,
    25             diff = curr - (debounce ? last_call : last_exec) - delay;
    26         clearTimeout(timer);
    27         if (debounce) {
    28             if (immediate) {
    29                 timer = setTimeout(exec, delay);
    30             } else if (diff >= 0) {
    31                 exec();
    32             }
    33         } else {
    34             if (diff >= 0) {
    35                 exec();
    36             } else if (immediate) {
    37                 timer = setTimeout(exec, -diff);
    38             }
    39         }
    40         last_call = curr;
    41     }
    42 };
    43 
    44 /**
    45  * 空闲控制 返回函数连续调用时,空闲时间必须大于或等于delay,fn才会执行
    46  * @param  {Function}   fn        要调用的函数
    47  * @param  {Number}     delay     空闲时间
    48  * @param  {Boolean}    immediate 给immediate参数传递false绑定的函数先执行,而不是delay后执行。
    49  * @return {Function}             实际调用函数
    50  */
    51 var debounce = function(fn, delay, immediate) {
    52     return throttle(fn, delay, immediate, true);
    53 }
  • 相关阅读:
    存在和本质
    数据库的日志机制
    【msql】关于redo 和 undo log
    乐观锁是基于比较的无锁并发控制机制
    两段锁协议和防止死锁的一次封锁法
    并发编程沉思录
    什么是B-Tree
    二叉树与b树的性能区别:计算、层级与io
    认知模型
    复杂性、认知与心理学
  • 原文地址:https://www.cnblogs.com/huliang56/p/7268259.html
Copyright © 2011-2022 走看看