JS防抖節(jié)流

JS防抖和節(jié)流

? ??在進(jìn)行窗口的resize、scroll,輸入框內(nèi)容校驗(yàn)等操作時(shí),如果事件處理函數(shù)調(diào)用的頻率無限制,會加重瀏覽器的負(fù)擔(dān),導(dǎo)致用戶體驗(yàn)非常糟糕。此時(shí)我們可以采用debounce(防抖)和throttle(節(jié)流)的方式來減少調(diào)用頻率,同時(shí)又不影響實(shí)際效果

函數(shù)防抖

? ? 當(dāng)持續(xù)觸發(fā)事件時(shí),一定時(shí)間段內(nèi)沒有觸發(fā)事件,才會執(zhí)行一次事件觸發(fā)函數(shù),如果設(shè)定的時(shí)間來到之前,又出發(fā)了一次事件,就重新開始延時(shí)

如下圖,持續(xù)觸發(fā)scroll事件,不會觸發(fā)事件函數(shù),只有當(dāng)一定時(shí)間段內(nèi)沒有觸發(fā)事件,才會執(zhí)行一次事件觸發(fā)函數(shù)。


var timer;? ? //undefined

window.onscroll = function(){

? ? //如果當(dāng)前timer不是空,說明前面有一個(gè)等待的請求還未發(fā)送,就停止前面的等待

? ? if(timer !== undefined){}

? ? ? ? clearTimeout(timer);

};

//再重新開始下一輪等待

timer = setTimerout(function(){

? ? //當(dāng)200ms內(nèi),未發(fā)生滾動時(shí),才發(fā)送正式的ajax請求

? ? console.log("發(fā)送ajax請求,加載更多數(shù)據(jù)...")

},200);

函數(shù)節(jié)流

? ? 當(dāng)持續(xù)觸發(fā)事件時(shí),保證一段時(shí)間內(nèi)只執(zhí)行一次觸發(fā)函數(shù)

<body>

? ? <button id="btn">加載更多<button>

</body>

<script>

? ? var canClick = true;? ? //全局開關(guān)變量

? ? btn.onclick=function(){????

? ? if(canClick){? ? //如果當(dāng)前開關(guān)開著說明可以單擊

? ???????canClick = false;? ? ?//先關(guān)閉開關(guān)?

? ? ? ? //再發(fā)請求

? ? ????console.log("發(fā)送ajax請求,加載更多信息...")

? ? ????setTimeout(function(){

? ? ? ? ????console.log("加載完成")

? ? ? ? ? ? //在函數(shù)的結(jié)尾打開開關(guān)準(zhǔn)備下一次單擊

????????????canClick = true;

????????},2000)

? ??}

}

</script>

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 防抖理解:將多次操作合并為一次操作進(jìn)行。原理是維護(hù)一個(gè)計(jì)時(shí)器,規(guī)定在delay時(shí)間后觸發(fā)函數(shù),但是在delay時(shí)間...
    aatter閱讀 308評論 0 0
  • 防抖(debounce) 思路:在第一次觸發(fā)事件時(shí),不立即執(zhí)行函數(shù),而是給出一個(gè)期限值比如200ms,然后: 如果...
    alanwhy閱讀 1,477評論 0 21
  • 什么是防抖節(jié)流 為了防止某個(gè)特定的函數(shù)(尤其是內(nèi)部有異步操作)在未得到結(jié)果前被重復(fù)執(zhí)行,或者想要用戶輸入、頁面滾動...
    fyAgent閱讀 1,261評論 0 0
  • 一.什么是函數(shù)防抖&節(jié)流 函數(shù)防抖函數(shù)防抖(debounce):在事件被觸發(fā)n秒后再執(zhí)行回調(diào),如果在這n秒內(nèi)又被觸...
    王蕾_fd49閱讀 565評論 0 1
  • 對我這種毫無經(jīng)驗(yàn)的媽媽,這一學(xué)期在喜悅 憤怒 徘徊 反思中悄悄地渡過,我常常問自己是不是我的方法不對??????...
    廖小娜閱讀 427評論 0 0

友情鏈接更多精彩內(nèi)容