今天面依图,让手写这个,没写出来,总结一下。
1、防抖:多次触发事件后,事件处理函数只执行一次,并且是在触发操作结束时执行。
原理:对处理函数进行延时操作,若设定的延时到来之前,再次触发事件,则清除上一次的延时操作定时器,重新定时。利用闭包,保存timer变量使之不被销毁,常驻内存。
function debounce(method,delay) {
var timer;//只会第一次调用函数的时候设置,以后都只执行闭包的函数
return function(){
clearTimeout(timer);
timer=setTimeout(method,delay)
}
}
2、节流:触发函数事件后,短时间间隔内无法连续调用,只有上一次函数执行后,过了规定的时间间隔,才能进行下一次的函数调用。隔一段时间触发一次。
原理:对处理函数进行延时操作,若设定的延时到来之前,再次触发事件,则清除上一次的延时操作定时器,重新定时。
// 简单的节流函数
function throttle(func, wait, mustRun) {
var timeout,startTime = new Date();
return function() {
var curTime = new Date();
// 如果达到了规定的触发时间间隔,触发 handler
if(curTime - startTime >= mustRun){
func();
startTime = curTime;
// 没达到触发间隔,重新设定定时器
}else{
clearTimeout(timeout);
timeout = setTimeout(func, wait);
}
};
};