javascript函式防抖

2021-09-13 18:09:20 字數 1191 閱讀 4426

函式防抖是頻繁發生的情況下,當有足夠的空閒時間,才會執行**一次,是優化高頻率執行**的一種手段。實際開發中會遇到頻發觸發事件的情況,比如resize,scroll,mousemove事件。

事件觸發 n 秒後執行,如果在這 n 秒內再次觸發,則以新的事件時間為準,n 秒後執行。無論觸發多少次,都要等到最後一次觸發 n 秒後才執行。

mousemove舉例,當滑鼠移入時,在div內顯示事件函式執行的次數。防抖的簡單實現如下:

let count = 0;

let odiv = document.queryselector('#container');

//防抖函式

function debounce(fn, delay)

}//事件函式

function eventfn()

odiv.onmousemove = debounce(eventfn, 1000);

正常情況下,在事件函式中使用this指向該事件繫結的元素。而此時eventfn是作為定時器的乙個引數,this指向window,需要更正this指向。

function debounce(fn, delay) , delay);

}}

一般情況下,事件函式eventfn的第乙個引數為event物件,但此時,值為undefined。修改防抖函式:

function debounce(fn, delay) , delay);

}}

防抖函式中使用了定時器,事件觸發後會延遲一定時間才呼叫事件函式,有時我們希望觸發事件可以立即執行,然後需要 n 秒後才能重新觸發執行。我們通過傳入第三個引數,判斷是否需要立即執行。

function debounce(fn, delay, immediate) , delay);

} else , delay);

} }

}

js 防抖 節流 JavaScript

實際工作中,通過監聽某些事件,如scroll事件檢測滾動位置,根據滾動位置顯示返回頂部按鈕 如resize事件,對某些自適應頁面調整dom的渲染 如keyup事件,監聽文字輸入並呼叫介面進行模糊匹配等等,這些事件處理函式呼叫的頻率如果太高,會加重瀏覽器的負擔,減弱效能,造成使用者體驗不好。此時需要採...

JavaScript防抖和節流

函式防抖和函式節流,兩者都是優化高頻率執行js 的一種手段。debounce 點我防抖!button debounce on click debounce function debounce 500 script 函式防抖的應用場景,最常見的就是頁面滾動條監聽的例子,來進行解析 let timer ...

函式防抖和節流(一) 防抖函式

一.什麼是函式防抖?1 概念 函式防抖 debounce 就是指觸發事件後,在延遲時間內函式只能執行一次,如果觸發事件後在延遲時間內又觸發了事件,則會重新計算函式延執行時間。等延遲時間計時完畢,則執行目標 2 例如 坐電梯的時候,如果電梯檢測到有人進來 觸發事件 就會多等待 10 秒,此時如果又有人...