debounce:防抖--------让在用户动作停止后延迟x ms再执行回调
throttle:节流--------一定时间内只触发一次函数;在时间间隔内再次调用throttle函数,会清空原来的定时器,重置一个定时器。
防抖和节流和异同:
相同:都是将多次回调的触发合并成一次执行。这就大大避免了过于频繁的事件回调操作。事件触发的频率没有改变,只是我们自定义的回调函数的执行频率变低了。
使用场景:
防抖:用在keydown事件上验证用户名最好
节流:用在resize改变布局上,onscroll滚动时候的。
用法:
例1:防抖
function debounce(fn,delay){
var delay=delay||200;
var timer;
return function(){
var th=this;
var args=arguments;
if(timer) {
clearTimeout(timer);
}
timer=setTimeout(function() {
timer=null;
fn.apply(th,args);
}, delay);
};
}
dom.addEventListener("mousemove",debounce(function(){
//做一些dom操作或者其他的。
.....
}));
例2:节流
var btn = document.getElementById("btn");
function throttle (method ,context) {
clearTimeout(method.tID);
method.tID = setTimeout (function () {
method.call(context);
}, 1000);
}
function say () {
console.log("按钮被点击了");
}
btn.addEventListener('click',function() {
throttle(say);
});