js 节流函数 throttle

Posted BinBinGo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js 节流函数 throttle相关的知识,希望对你有一定的参考价值。

/*
* 频率控制 返回函数连续调用时,fn 执行频率限定为每多少时间执行一次
* @param fn {function}  需要调用的函数
* @param delay  {number}    延迟时间,单位毫秒
* @param immediate  {bool} 给 immediate参数传递false 绑定的函数先执行,而不是delay后后执行。
* @param debounce  {bool} 给 immediate参数传递false 绑定的函数先执行,而不是delay后后执行。debounce
* @return {function}实际调用函数
*/

 var throttle = function(fn, delay, immediate, debounce) {
    var curr = +new Date(),//当前事件
        last_call = 0,
        last_exec = 0,
        timer = null,
        diff, //时间差
        context,//上下文
        args,
        exec = function () {
            last_exec = curr;
            fn.apply(context, args);
        };
    return function () {
        curr = +new Date();
        context = this,
        args = arguments,
        diff = curr - (debounce ? last_call : last_exec) - delay;
        clearTimeout(timer);
        if (debounce) {
            if (immediate) {
                timer = setTimeout(exec, delay);
            } else if (diff >= 0) {
                exec();
            }
        } else {
            if (diff >= 0) {
                exec();
            } else if (immediate) {
                timer = setTimeout(exec, -diff);
            }
        }
        last_call = curr;
    }
};

 

 

var setval =  function(){
    var mydate = new Date();
    var s = mydate.getSeconds();
    var ms = mydate.getMilliseconds();
    document.getElementById("ipt").value=s+":"+ms;

}

//以下两种绑定方法都可以,特别是jquery绑定时.注意 $("#btn")[0]
//document.getElementById("btn").onclick = throttle(function(){ setval(); },1000,true,false); 
$("#btn")[0].onclick = throttle(function(){ setval(); },1000,true,false);

 

以上是关于js 节流函数 throttle的主要内容,如果未能解决你的问题,请参考以下文章

JS debounce和throttle 去抖和节流

js 函数节流 jQuery throttle/debounce

js 消抖(debounce)与节流(throttle)

js 函数的防抖(debounce)与节流(throttle)

js的函数节流(throttle)

Javascript函数节流 —— How To Use Throttle