节流器:对重复的业务逻辑进行节流控制,执行最后一次操作并取消其他操作,以提高性能。
节流器可在很多UI操作中用到,例如绑定了scroll、mouseover事件等
//节流器
var throttle = function(){
//获取第一个参数
var isClear = arguments[0],fn;
//如果第一个参数是boolean类型,那么表示清除计时器
if(typeof isClear === 'boolean'){
//第二参数为函数
fn = arguments[1];
//如果设置了计时器句柄,就删除
fn._throttleID && clearTimeout(fn._throttleID) ;
}else{
//第一个参数为函数
fn = isClear;
//第二参数为函数的传参
var param = arguments[1];
var p = $.extend({
context:null,//作用域
args:[],//执行的参数
timeout:300//延时时间
},param);
//清除计时器句柄
arguments.callee(true,fn);
//设置计时器
fn._throttleID = setTimeout(function(){
fn.apply(p.context,p.args);
},p.timeout);
}
}