js實現函式防抖與節流

2022-04-18 22:26:46 字數 1802 閱讀 5779

防抖:在事件被觸發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 故事 阿里巴巴月餅門事...