您好,登錄后才能下訂單哦!
javascript實現節流和防抖函數?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
1.節流函數throttle
// 節流方案1,每delay的時間執行一次,通過開關控制 function throttle(fn, delay, ctx) { let isAvail = true return function () { let args = arguments // 開關打開時,執行任務 if (isAvail) { fn.apply(ctx, args) isAvail = false // delay時間之后,任務開關打開 setTimeout(function () { isAvail = true }, delay) } } } // 節流方案2,通過計算開始和結束時間 function throttle(fn,delay){ // 記錄上一次函數出發的時間 var lastTime = 0 return function(){ // 記錄當前函數觸發的時間 var nowTime = new Date().getTime() // 當當前時間減去上一次執行時間大于這個指定間隔時間才讓他觸發這個函數 if(nowTime - lastTime > delay){ // 綁定this指向 fn.call(this) //同步時間 lastTime = nowTime } } }
2.防抖debounceTail
2.1)只執行首次
// 防抖 且首次執行 // 采用原理:第一操作觸發,連續操作時,最后一次操作打開任務開關(并非執行任務),任務將在下一次操作時觸發) function debounceStart(fn, delay, ctx) { let immediate = true let movement = null return function() { let args = arguments // 開關打開時,執行任務 if (immediate) { fn.apply(ctx, args) immediate = false } // 清空上一次操作 clearTimeout(movement) // 任務開關打開 movement = setTimeout(function() { immediate = true }, delay) } }
2.2)只執行最后一次
// 防抖 尾部執行 // 采用原理:連續操作時,上次設置的setTimeout被clear掉 function debounceTail(fn, delay, ctx) { let movement = null return function() { let args = arguments // 清空上一次操作 clearTimeout(movement) // delay時間之后,任務執行 movement = setTimeout(function() { fn.apply(ctx, args) }, delay) } }
關于javascript實現節流和防抖函數問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。