//多用于鼠标滚动,移动,窗口大小改变等高频率触发事件 // var count=0; // function fn1(){ // count++; // console.log(count) // } // //100ms内连续触发的调用,后一个调用会把前一个调用的等待处理掉,但每隔200ms至少执行一次 // document.onmousemove=ecDo.delayFn(fn1,100,200) delayFn: function (fn, delay, mustDelay) { var timer = null; var t_start; return function () { var context = this, args = arguments, t_cur = +new Date(); //先清理上一次的调用触发(上一次调用触发事件不执行) clearTimeout(timer); //如果不存触发时间,那么当前的时间就是触发时间 if (!t_start) { t_start = t_cur; } //如果当前时间-触发时间大于最大的间隔时间(mustDelay),触发一次函数运行函数 if (t_cur - t_start >= mustDelay) { fn.apply(context, args); t_start = t_cur; } //否则延迟执行 else { timer = setTimeout(function () { fn.apply(context, args); }, delay); } }; }