- 事件被触发、n秒内只执行一次事件处理函数
function throttle(fn,time){
var t = null,
begin = new Date().getTime(),
res;
var throttled = function(){
var _this = this,
nowDate = new Date().getTime();
if(t){ //每次执行,判断是否有定时器,有则清除
clearTimeout(t);
}
if(nowDate - begin >= time){
// 用户持续执行,当:当前时间 - 开始时间 > 设置的时长
// 则会执行一次这里的代码
res = fn.apply(_this);
begin = nowDate; //开始时间重置
}else{
//说明用户停止行为,我们需要最后在执行一次
t = setTimeout(function(){
res = fn.apply(_this);
},time);
}
return res;
};
throttled.remove = function(){
clearTimeout(t);
t = null;
};
return throttled;
}