鼠標滾動(scroll)、調整窗口大?。╮esize)、敲擊鍵盤(keyup)這類事件在觸發(fā)時往往頻率極高,這時事件對應的回調函數(shù)會反復執(zhí)行,如果回調函數(shù)內包含復雜的運算邏輯或者DOM操作等,就可能造成瀏覽器的不流暢。而防抖和節(jié)流就是為了優(yōu)化此類問題的,兩者并不會減少事件的觸發(fā),而是減少事件觸發(fā)時回調函數(shù)的執(zhí)行次數(shù)。
下面我們就先來重點了解以下防抖吧!
防抖:事件短時間內高頻次觸發(fā),但是只有在規(guī)定時間內不再觸發(fā)后才執(zhí)行回調
原理:防抖是維護一個計時器,規(guī)定在delay時間后觸發(fā)函數(shù),但是在delay時間內再次觸發(fā)的話,都會清除當前的 timer 然后重新設置超時調用,即重新計時。這樣一來,只有最后一次操作能被觸發(fā)。
應用場景:
- 用戶在輸入框中連續(xù)輸入一串字符后,只會在輸入完后去執(zhí)行最后一次的查詢請求,這樣可以有效減少請求次數(shù),節(jié)約請求資源;
2.window的resize、scroll事件,不斷地調整瀏覽器的窗口大小、或者滾動時會觸發(fā)對應事件,防抖讓其只觸發(fā)一次
下面直接看代碼
<script>
chengeFs()
function chengeFs(){
document.documentElement.style.fontSize = document.documentElement.clientWidth / 10 + 'px';
}
var timer = null;
window.onresize = function () {
if(timer){
clearTimeout(timer);
timer = null;
}
timer = setTimeout(chengeFs,300)
}
</script>