防抖節流函式封裝

2021-10-08 05:27:57 字數 1184 閱讀 6058

為什麼引入防抖和節流

當乙個函式被頻繁、無限制的被呼叫的時候,會加重瀏覽器的負擔,造成瀏覽器卡頓的現象。

例如:常用瀏覽器滾動scroll,滑鼠移動onmousemove事件觸發的事件。因此引入了防抖和節流兩個概念來解決這個問題。

防抖 debounce
監聽乙個輸入框的,文字變化後觸發change事件.

直接用keyup事件,則會頻繁觸發change事件.

防抖:使用者輸入結束或暫停時,才觸發change事件

防抖函式封裝:

//dom元素

//js**

const input1 = document.getelementbyid('input1')

function debounce(fn,delay)

timer=settimeout(() => , delay);

}}input1.addeventlistener('keyup', debounce(()=>,500))

防抖:當持續觸發事件時,指定時間(自定義)沒有再觸發事件,事件處理函式才會執行一次。如果小於指定。時間觸發事件,事件處理函式不會被執行,而是以最後一次觸發的事件,重新計算,即:最後時間點後指定時間,觸發事件。

通俗理解:停止動作後(時間點)+ 自定義時間(延遲)=> 觸發事件

節流 throttle

拖拽乙個元素是,要隨時拿到該元素被拖拽的位置.

直接用drag事件,則會頻繁出發,很容易導致卡頓.

節流:無論拖拽速度有多快,都會每隔 100ms觸發一次

節流函式封裝:

//dom元素

可拖拽//js**

const div1 = document.getelementbyid('div1')

function throttle(fn,delay=100)

timer=settimeout(() => , delay);

}}div1.addeventlistener('drag', throttle(function (e), 200))

節流:當持續觸發事件時,每隔指定時間觸發一次事件處理函式。當然,是你觸發事件的時間小於你設定的每隔指定時間。

通俗解決:「勻速等距離」觸發事件處理函式。

防抖與節流方案 函式防抖和節流

在前端開發的過程中,我們經常會需要繫結一些持續觸發的事件,如 resize scroll mousemove 等等,但有些時候我們並不希望在事件持續觸發的過程中那麼頻繁地去執行函式。通常這種情況下我們怎麼去解決的呢?一般來講,防抖和節流是比較好的解決方案。讓我們先來看看在事件持續觸發的過程中頻繁執行...

函式的節流 防抖

函式的節流 預先設定乙個執行週期,當呼叫動作的時刻大於等於執行週期則執行該動作,然後進入下乙個新週期 函式防抖 當呼叫動作過n毫秒後,才會執行該動作,若在這n毫秒內又呼叫此動作則將重新計算執行時間 應用場景 函式節流 throttle 與 函式防抖 debounce 都是為了限制函式的執行頻次,以優...

函式防抖與節流

因為在寫前端頁面時需要監控滑鼠滾輪,這導致在很短時間內,會觸發很多次函式,造成頁面卡頓堵塞,正巧自己在看github時看到了這個,所以自己記錄一下。函式防抖就是讓某個函式在上一次執行後,滿足等待某個時間內不再觸發此函式後再執行,而在這個等待時間內再次觸發此函式,等待時間會重新計算。underscor...