debounce 去抖
適用于resize事件等
在window的'resize'事件中,會被執(zhí)行很多次皮壁,而每一次的執(zhí)行椭更,都會導(dǎo)致瀏覽器的重排重繪動作,這時候就有可能出現(xiàn)了頁面卡頓現(xiàn)象了蛾魄。
那么虑瀑,debounce就出現(xiàn)了,它的作用在于讓這個事件處理函數(shù)在連續(xù)觸發(fā)時畏腕,只在最后一次執(zhí)行動作缴川,其他時候不予理會
function debounce(fn, wait) {
let timer = null;
return function(...args) {
if (timer) {
clearTimeout(timer);
timer = null;
}
timer = setTimeout(function() {
fn.apply(this, args)
}, wait)
}
}
throttle 節(jié)流
適用于mousemove、scroll事件等
跟debounce一樣描馅,都是減少事件的執(zhí)行次數(shù)。不同點在于而线,這個是會在每間隔多少時間就去執(zhí)行一次事件處理函數(shù)铭污,例如200ms,400ms膀篮,600ms... 當然嘹狞,這個時間并不是精準的,只是大概的一個時間間隔
function throttle(fn, wait) {
let timer = null;
return function(...args) {
if (timer) {
return;
}
timer = setTimeout(function() {
fn.call(this, ...args);
timer = null;
})
}
}