函式防抖是頻繁發生的情況下,當有足夠的空閒時間,才會執行**一次,是優化高頻率執行**的一種手段。實際開發中會遇到頻發觸發事件的情況,比如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 秒,此時如果又有人...