//多用于鼠标滚动,移动,窗口大小改变等高频率触发事件
// 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);
}
};
}