防抖:在事件被觸發n秒後再執行**,如果在這n秒內又被觸發,則重新計時。
節流:規定在乙個單位時間內,只能觸發一次函式。如果這個單位時間內觸發多次函式,只有一次生效。
js函式防抖與節流的區別:
函式防抖是某一段時間內只執行一次,而函式節流是間隔時間執行。
1、通過理解函式防抖與函式節流的概念後,使用閉包實現函式防抖和節流,沒有考慮到對於節流,如果使用者在下一次請求之前已輸入完畢,但是此時不會再進行請求,則會導致最後輸入的文字獲取其他事件改變不發請求,即漏請求,所以需要加乙個settimeout兜底函式,且在每次準備請求的時候,設乙個flag,即是否已經傳送請求,如果走了正常週期傳送請求,改為true,否則即為false,走settimout,讓settimeout比剩餘事件略長一些,優先走節流定時器請求;
2、如果是input輸入事件,需要加入上面的超時兜底,如果是點選事件節流,不需要加入超時兜底;
3、如果使用箭頭函式,則不需要儲存this。
**實現
div><
div>
<
input
type
="text"
id="undebounce"
>
div>
<
div>
<
input
type
="text"
id="debounce"
>
div>
<
div>
<
input
type
="text"
id="throttle"
>
div>
div>
//函式防抖節流
var elem1 = document.getelementbyid("undebounce")
var elem2 = document.getelementbyid("debounce")
var elem3 = document.getelementbyid("throttle")
//不防抖
function
ajax1(value)
elem1.addeventlistener('keyup',function
(e) )
//防抖
function
ajax2(value)
function
debounce(func,delay)
timer = settimeout(()=>,delay)
}}let debouncefn = debounce(ajax2,1000)
elem2.addeventlistener('keyup',function
(e) )
//// 節流
function
ajax3(value)
function
throttle(func,delay)
if(now-lasttime>=delay)else
},delay-(now-lasttime)+1000) //
settimeout多一些,優先執行週期性請求
} }
}let throttlefn = throttle(ajax3,5000)
elem3.addeventlistener('keyup',function
(e) )
js防抖與節流
在效能上,防抖和節流還是很重要的,處理不當或者放任不管就容易引起瀏覽器卡死。我們開發頁面經常會遇到乙個返回頂部的功能。這個按鈕只會在滾動到距離頂部一定位置之後才出現 問題 mounted methods else 效果圖 在執行的時候會發現存在乙個問題 這個函式的預設執行頻率,太!高!了!然而實際上...
js節流與防抖
函式防抖 debounce 觸發高頻事件後n秒內函式只會執行一次,如果n秒內高頻事件再次被觸發,則重新計算時間。函式節流 throttle 高頻事件觸發,但在n秒內只會執行一次,所以節流會稀釋函式的執行頻率。函式節流 throttle 與 函式防抖 debounce 都是為了限制函式的執行頻次,以優...
js函式的節流與防抖
在前端開發中有一部分使用者行為會頻繁的觸發事件執行,而對於dom的操作 資源載入等耗費效能的處理,很可能會導致介面卡頓,甚至瀏覽器奔潰。函式的節流與防抖就是為了解決類似需求而產生的。1 節流 場景 視窗調整 resize 頁面滾動 scroll 搶購瘋狂點選 movedown 故事 阿里巴巴月餅門事...