您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“JavaScript中防抖與節流指的是什么意思”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“JavaScript中防抖與節流指的是什么意思”這篇文章吧。
函數防抖: 在頻繁觸發某一個事件時,一段時間內不再觸發該事件后才會去調用對應的回調函數,在設定間隔時間內如果下一次事件被觸發, 那么就重新開始定時器,直到事件觸發結束。
規定時間內沒有繼續觸發事件的前提下,再去調用事件處理函數;
具體如下面的例子所示:
/*定義防抖函數 * func:傳入一個函數,事件不再持續觸發時會調用該函數 * delay:定義持續多久后執行傳入的回調函數 * */ function debounce(func,delay) { let timer = null // 用于保存定時器 return function (...args) { // 如果定時器存在,清除定時器,隨后重新設置timer if(timer !== null) clearTimeout(timer) timer = setTimeout(func, delay) // 超過delay為接收到事件會調用這里的func 必要的額時候可以修改func的this指向 由于timer對外部存在引用,因此不會被銷毀 } } /*事件處理函數*/ function testDeBounce(){ console.log('你看我執行了幾次??') } // 接收debounce返回的函數 const temp = debounce(testDeBounce(),1000) /*綁定事件,測試防抖函數*/ window.addEventListener('scroll',()=>{ temp() }); // 這樣寫最少調用一次事件處理函數,最多也不會多余下面的寫法執行的次數 window.addEventListener('scroll', testDeBounce); // 如果這樣寫的話,每當頁面滾動就會調用事件處理函數
總結一下思路:
1.定義一個節流函數
2.函數內部使用一個變量保存定時器
3.返回一個函數,函數內部定義:如果定時器已經存在就清除定時器,重新設置定時器
4.定義一個變量來接收debounce
返回的函數
5.在事件的回調函數中直接調用上一步的變量接收的方法
函數節流: 在事件持續觸發的前提下,保證一定時間段內只調用一次事件處理函數,就是函數節流;
函數節流實現的方式: 定時器、時間戳、定時器+時間戳;
思路:
1.定義節流函數throttle
2.定義timer
保存定時器
3.返回一個函數。函數內部定義:如果定時器不存在,設置定時器,間隔某一時間后將timer設置為null
,如果在這之前事件再次觸發,則定時器中的回調無效
<button>這是一個孤獨的按鈕</button>
/* * 定義定時器節流函數 * func:傳入事件處理函數 * delay:在delay指定的時間內定時器回調無效 * */ function throttle(func,delay) { let timer = null const context = this return function(...args){ // 如果定時器不存在 if(!timer){ timer = setTimeout(()=>{ func.apply(context,args) // 考慮返回的函數調用的環境,因此這里不直接使用this timer = null // delay之后清除定時器 },delay) } } } function test() { console.log('啊啊啊!') } const temp = throttle(test,1000) document.querySelector('button').addEventListener('click',()=>{ temp() })
var throttle = function(func, delay) { var prev = Date.now(); return function() { var context = this; var args = arguments; var now = Date.now(); if (now - prev >= delay) { func.apply(context, args); prev = Date.now(); } } } function handle() { console.log(Math.random()); } window.addEventListener('scroll', throttle(handle, 1000));
// 節流throttle代碼(時間戳+定時器): var throttle = function(func, delay) { var timer = null; var startTime = Date.now(); return function() { var curTime = Date.now(); var remaining = delay - (curTime - startTime); var context = this; var args = arguments; clearTimeout(timer); if (remaining <= 0) { func.apply(context, args); startTime = Date.now(); } else { timer = setTimeout(func, remaining); } } } function handle() { console.log(Math.random()); } window.addEventListener('scroll', throttle(handle, 1000));
以上是“JavaScript中防抖與節流指的是什么意思”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。