節流
什么是節流?
節流就是同一個事件 一秒鐘他執行了很多次。但是我不想他執行這么多次,我只想讓他執行一次 或者兩次。
那該怎么辦? why baby why
那我想就是他執行的時候 我就設置一個定時器,如果定時器是空的,等會就去給你執行。如果你前面執行了馬上又去執行,那不好意思你上次的都還沒去執行,那這次我肯定不會去執行。定時器有值,那我就等上次執行了再去執行。
let timer = null;
const handleMouseMove = function (func, timeMs = 100) {if (timer) {// return //節流clearTimeout(timer); //防抖}timer = setTimeout(() => {func();timer = null;}, timeMs);
};
防抖
什么是防抖?
防抖就是同一個事件 一秒鐘他執行了很多次。但是我只想讓他沒一直點擊(執行)的時候才去 執行,就是你皮等你皮,等你累了,聽話了我再去幫你辦事
那該怎么辦? why baby why
那我想就是他執行的時候,我就看你累了沒 聽話了不,如果聽話 那我執行,不聽話 你一直點 我就一直不去執行。
let timer = null;
const handleMouseMove = function (func, timeMs = 100) {if (timer) {return //節流//clearTimeout(timer); //防抖}timer = setTimeout(() => {func();timer = null;}, timeMs);
};
發現節流和防抖代碼居然只有一行不同,這是為啥
- 節流 如果time里面的定時器函數未執行 已經在隊列的時候 等待他執行了后再去執行
- 防抖 如果timer里面的定時器函數未執行 timer有值直接清除定時器 不讓定時器函數執行上次未執行的代碼塊 然后再次調用定時器,等待執行