摘要:防抖的中心思想在于我會等你到底。這次的司機比較有耐心。第一個乘客上車后,司機開始計時比如說十分鐘。而認為,最后一個人說了算,會為每一個新乘客設定新的定時器。
防抖的中心思想在于:我會等你到底。在某段時間內,不管你觸發了多少次回調,我都只認最后一次。
繼續講司機開車的故事。這次的司機比較有耐心。第一個乘客上車后,司機開始計時(比如說十分鐘)。十分鐘之內,如果又上來了一個乘客,司機會把計時器清零,重新開始等另一個十分鐘(延遲了等待)。直到有這么一位乘客,從他上車開始,后續十分鐘都沒有新乘客上車,司機會認為確實沒有人需要搭這趟車了,才會把車開走。
我們對比 throttle 來理解 debounce:在throttle的邏輯里,“第一個人說了算”,它只為第一個乘客計時,時間到了就執行回調。而 debounce 認為,“最后一個人說了算”,debounce 會為每一個新乘客設定新的定時器。
我們基于上面的理解,一起來寫一個 debounce:
// fn是我們要包裝的回調函數事件,delay每次等待都執行時間
function debounce(fn, delay) {
// 定時器; let timer = null; return function() { // 保存上下文的this let context = this // 保存傳入的參數 let args = arguments; // 每次調用前都清空定時器 if (timer) { clearTimeout(timer) } // 去設立一個新的定時器 timer = setTimeout (function() { fn.apply(context, args); }, delay) }
}
// 用throttle來包裝scroll的回調
let better_scroll = debounce(() => {console.log("觸發了滾動事件"), 1000});
document.addEventListener("scroll", better_scroll);
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/101276.html
摘要:本文主要討論防抖,鏡像文章節流理解,實踐與實現。分開討論防抖和節流,主要是為了讓一些還不太了解防抖節流的讀者能夠有針對性地,逐一掌握它們。防抖是什么結合上方案例,防抖可以理解為多次觸發事件后,事件處理函數只執行一次。 為了完整閱讀體驗,歡迎移步到我的博客原文。 防抖(去抖),以及節流(分流)在日常開發中可能用的不多,但在特定場景,卻十分有用。本文主要討論防抖,鏡像文章:節流 - 理解,...
摘要:若時間差大于間隔時間,則立刻執行一次函數。不同點函數防抖,在一段連續操作結束后,處理回調,利用和實現。函數防抖關注一定時間連續觸發的事件只在最后執行一次,而函數節流側重于一段時間內只執行一次。 原博客地址,歡迎star 函數防抖和節流 函數防抖和函數節流:優化高頻率執行js代碼的一種手段,js中的一些事件如瀏覽器的resize、scroll,鼠標的mousemove、mouseover...
摘要:函數防抖的要點,是需要一個來輔助實現,延遲運行需要執行的代碼。若計時期間事件沒有被重新觸發,等延遲時間計時完畢,則執行目標代碼。而非立即執行版指的是觸發事件后函數會立即執行,然后秒內不觸發事件才能繼續執行函數的效果。。 JS中的函數防抖 一、什么是函數防抖 概念:函數防抖(debounce),就是指觸發事件后,在 n 秒內函數只能執行一次,如果觸發事件后在 n 秒內又觸發了事件,則會重...
摘要:基礎防抖我們現在寫一個最基礎的防抖處理標記事件也做如下改寫現在試一下,我們會發現只有我們停止滾動秒鐘的時候,控制臺才會打印出一行隨機數。 為何要防抖和節流 有時候會在項目開發中頻繁地觸發一些事件,如 resize、 scroll、 keyup、 keydown等,或者諸如輸入框的實時搜索功能,我們知道如果事件處理函數無限制調用,會大大加重瀏覽器的工作量,有可能導致頁面卡頓影響體驗;后臺...
摘要:而上述兩種方法,就叫做函數的節流和防抖。二函數節流和函數防抖函數節流函數節流函數節流是讓這個函數在間隔某一段時間執行一次。在這個項目中,我認為函數節流和函數防抖都能很好的解決問題。 一 項目需求 最近在做一些小的練手代碼的時候,碰到了一個很常見的問題,當在搜索框中進行搜索的時候,如果快速輸入很多字符的話,搜索框的監聽回調函數會執行很多次,如果回調業務較復雜的話,可能會導致頁面運行緩慢甚...
閱讀 3018·2023-04-25 20:22
閱讀 3335·2019-08-30 11:14
閱讀 2590·2019-08-29 13:03
閱讀 3178·2019-08-26 13:47
閱讀 3218·2019-08-26 10:22
閱讀 1263·2019-08-23 18:26
閱讀 609·2019-08-23 17:16
閱讀 1908·2019-08-23 17:01