概念: 延遲要執行的動作,若在延時的這段時間內,再次觸發了,則取消之前開啟的動作,重新計時。比如電腦無操作1分鐘後會進入休眠,當第40秒時滑鼠被移動一下,重新計時1分鐘。
實現方式: 定時器。通過在監聽的內部對定時器進行清除
let input = document.getelementbyid('test');//鍵盤抬起獲取輸入框中的value值
let timer = null; //定時器的返回值,主要是為了清除定時器的傳參
input.addeventlistener('keyup',()=>,500);
});
概念:設定乙個特定的時間,讓函式在特定的時間內只執行一次,不會頻繁執行。比如在鍵盤按下的時候會觸發乙個操作,但是你一直按著的話,就會一直觸發操作,函式節流就是為了避免這種情況。
實現方式:定時器、標識 。通過標識的判斷進行操作,操作完將標識置為false,通過定時器置回標識的狀態。
例子:在滑鼠滾輪滾動的時候,每隔2秒鐘,列印一次
let body = document.getelementsbytagname('body')[0];
//每次滾輪後都會將狀態置為false,不會進入列印,等兩秒後再將狀態置為true。
let flag = true;
body.onscroll = ()=>,2000)
}}
函式防抖與函式節流
函式防抖 debounce 當呼叫動作過n毫秒後,才會執行該動作,若在這n毫秒內又呼叫此動作則將重新計算執行時間 函式節流 throttle 預先設定乙個執行週期,當呼叫動作的時刻大於等於執行週期則執行該動作,然後進入下乙個新週期 函式節流 throttle 與函式防抖 debounce 都是為了限...
函式節流與函式防抖
這裡以判斷頁面是否滾動到底部為例,普通的做法就是監聽window物件的scroll事件,然後再函式體中寫入判斷是否滾動到底部的邏輯 這樣做的乙個缺點就是比較消耗效能,因為當在滾動的時候,瀏覽器會無時不刻地在計算判斷是否滾動到底部的邏輯,而在實際的場景中是不需要這麼做的,在實際場景中可能是這樣的 在滾...
函式防抖與函式節流
前言 有一些瀏覽器事件我們不希望它很頻繁的觸發,如調整視窗大小 onresize 監聽滾動條滾動 onscroll 如果這些監聽事件需要呼叫介面的話一秒內可能會呼叫上百次,這樣坑定是有問題的。函式防抖 debounce 如果有人進電梯 觸發事件 那電梯將在10秒鐘後出發 執行事件 這時如果又有人進電...