在JavaScript中實現(xiàn)防抖和節(jié)流的方法詳解
下面給你最常用、最標準、直接可復(fù)制的防抖 & 節(jié)流實現(xiàn),附帶使用示例,一看就會。
1. 防抖(Debounce)
原理:頻繁觸發(fā)時,只在最后一次觸發(fā)后延遲執(zhí)行,中間全部忽略。
最簡實現(xiàn)
function debounce(fn, delay = 300) {
let timer = null;
return function (...args) {
clearTimeout(timer);
timer = setTimeout(() => {
fn.apply(this, args);
}, delay);
};
}
使用示例(搜索框)
const onSearch = debounce((value) => {
console.log("請求搜索:", value);
}, 500);
input.addEventListener("input", (e) => {
onSearch(e.target.value);
});
2. 節(jié)流(Throttle)
原理:固定時間內(nèi)只執(zhí)行一次,不管觸發(fā)多頻繁。
時間戳版(立即執(zhí)行,更常用)
function throttle(fn, interval = 300) {
let lastTime = 0;
return function (...args) {
const now = Date.now();
if (now - lastTime >= interval) {
fn.apply(this, args);
lastTime = now;
}
};
}
使用示例(滾動)
const handleScroll = throttle(() => {
console.log("滾動位置", window.scrollY);
}, 300);
window.addEventListener("scroll", handleScroll);
3. 帶立即執(zhí)行的防抖(可選)
有些場景希望第一次立即執(zhí)行,后面再防抖:
function debounceImmediate(fn, delay = 300) {
let timer = null;
return function (...args) {
const isFirst = !timer;
clearTimeout(timer);
timer = setTimeout(() => {
timer = null;
}, delay);
if (isFirst) {
fn.apply(this, args);
}
};
}
4. 快速記憶
- 防抖:等你停手再執(zhí)行 → 搜索框、輸入驗證、按鈕防重復(fù)點擊
- 節(jié)流:冷卻時間 → 滾動、拖拽、resize、高頻點擊
需要我給你寫一個帶取消功能、支持立即執(zhí)行、兼容 React 的高級版防抖節(jié)流嗎?
以上就是在JavaScript中實現(xiàn)防抖和節(jié)流的方法詳解的詳細內(nèi)容,更多關(guān)于JavaScript實現(xiàn)防抖和節(jié)流的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
JavaScript實現(xiàn)網(wǎng)頁計算器功能
這篇文章主要為大家詳細介紹了JavaScript實現(xiàn)網(wǎng)頁計算器功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-10-10
JavaScript實現(xiàn)煙花特效(面向?qū)ο?
這篇文章主要為大家詳細介紹了JavaScript使用面向?qū)ο缶幊虒崿F(xiàn)煙花特效,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-08-08
TensorFlow.js機器學(xué)習(xí)預(yù)測鳶尾花種類
TensorFlow.js是一個開源的基于硬件加速的JavaScript庫,用于訓(xùn)練和部署機器學(xué)習(xí)模型。本教程將會帶大家簡單了解和使用TensorFlow.js框架實現(xiàn)預(yù)測鳶尾花種類2022-11-11
基于Javascript實現(xiàn)網(wǎng)頁版的繪圖板
這篇文章主要為大家詳細介紹了如何基于HTML5 Canvas和jQuery實現(xiàn)的簡單網(wǎng)頁版繪圖編輯器,文中的示例代碼講解詳細,需要的小伙伴可以了解下2024-10-10
Three.js如何用軌跡球插件(trackball)增加對模型的交互功能詳解
這篇文章主要給大家介紹了關(guān)于Three.js如何用軌跡球插件,也就是trackball增加對模型的交互功能的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。2017-09-09

