//节流函数(预先设定一个执行周期,当调用动作的时刻大于等于执行周期则执行该动作,然后进入下一个新周期。)
//该方法主要利用两次函数执行的时间差判断
function throttle(action, delay) {
var last = 0; //上次执行的时间
return function() {
var curr = +new Date(); ///获取当前时间
if (curr - last > delay) { //如果两次函数执行的时间间隔大于指定的值,即可执行
action.apply(this, arguments) //执行时把对应的参数传递下去
last = curr //保存上次执行的时间
};
};
}
//去抖函数(当调用动作n毫秒后,才会执行该动作,若在这n毫秒内又调用此动作则将重新计算执行时间,如此往复,直到不再调用该动作,函数才会执行。)
//该方法利用的是延迟调用,在指定时间内如果再次执行,那么上次的定时器将被清理,直到指定时间内不再调用,函数才会被执行!
function debounce(action, idle) {
var last = null;
return function() {
var ctx = this;
var args = arguments;
clearTimeout(last);
last = setTimeout(function() {
action.apply(ctx, args)
}, idle);
}
}
通常时间设为16.7sm,由于主流的屏幕刷新率都在60hz,因此渲染一帧的事件就必须控制在16.7ms内才能保证不掉帧。也就是说每一次渲染都要在 16.7ms
评论 (0)