JavaScript防抖與節(jié)流的實(shí)現(xiàn)與注意事項(xiàng)
概念
防抖:點(diǎn)擊N次提交按鈕,只有最后一次會發(fā)出請求。減少無效請求的次數(shù)。
節(jié)流:每點(diǎn)擊一次按鈕,都會失效一段時(shí)間。降低觸發(fā)的頻率。
實(shí)現(xiàn)
/*
防抖
時(shí)限內(nèi),只有最后一次調(diào)用會執(zhí)行
*/
function debounce(func, interval = 0) {
let timer;
return function () {
if (timer) {
clearTimeout(timer);
}
timer = setTimeout(() => {
func()
}, interval)
}
}
/*
節(jié)流
執(zhí)行之后會失效一段時(shí)間
*/
function throttle(fn, interval=0, immediate=true) {
let valid = true
return function () {
if (!valid) {
return
}
valid = false
if (immediate) {
fn()
setTimeout(() => {
valid = true;
}, interval)
} else {
setTimeout(() => {
fn()
valid = true;
}, interval)
}
}
}測試
function say() {
console.log(1)
}
var a = debounce(say, 1000)
var b = throttle(say, 1000)
var c = throttle(say, 1000, false)
<button onclick="a()">測試防抖</button>
<button onclick="b()">測試節(jié)流一</button>
<button onclick="c()">測試節(jié)流二</button>
效果:
防抖。

節(jié)流,立即執(zhí)行。

節(jié)流,延時(shí)執(zhí)行。

注意事項(xiàng)
原理:閉包。每調(diào)用一次都會對應(yīng)一個(gè)閉包。
不能夠像下面這樣寫:
<button onclick="debounce(say, 1000)()">測試防抖</button> <button onclick="throttle(say, 1000)()">測試節(jié)流一</button> <button onclick="throttle(say, 1000, false)()">測試節(jié)流二</button>
不然:

總結(jié)
到此這篇關(guān)于JavaScript防抖與節(jié)流的實(shí)現(xiàn)與注意事項(xiàng)的文章就介紹到這了,更多相關(guān)JS防抖與節(jié)流內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 利用JavaScript實(shí)現(xiàn)防抖節(jié)流函數(shù)的示例代碼
- JavaScript函數(shù)防抖與函數(shù)節(jié)流的定義及使用詳解
- JS中節(jié)流和防抖函數(shù)的實(shí)現(xiàn)及區(qū)別示例
- JavaScript防抖動與節(jié)流處理
- JavaScript中防抖和節(jié)流的區(qū)別及適用場景
- 詳細(xì)聊一聊js防抖節(jié)流到底是什么
- JavaScript的防抖和節(jié)流一起來了解下
- JavaScript中函數(shù)的防抖與節(jié)流詳解
- JavaScript防抖與節(jié)流超詳細(xì)全面講解
相關(guān)文章
Three.js獲取鼠標(biāo)點(diǎn)擊的三維坐標(biāo)示例代碼
本篇文章主要介紹了Three.js獲取鼠標(biāo)點(diǎn)擊的三維坐標(biāo)示例代碼。具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-03-03
JavaScript(JS) 壓縮 / 混淆 / 格式化 批處理工具
本工具所有的功能實(shí)現(xiàn)都是由 ttp://jscompress.sinaapp.com/api 處理.(包括現(xiàn)在可以使用的這個(gè)在線壓縮)2010-12-12
JavaScript 數(shù)組中插入元素的實(shí)例方法
這篇文章主要介紹了如何在 JavaScript 數(shù)組中插入元素,在本文中,我們學(xué)習(xí)了使用?splice()?方法將元素添加到數(shù)組的開始、末尾或任何位置的各種方法,需要的朋友可以參考下2023-09-09
說明你的Javascript技術(shù)很爛的五個(gè)原因
Javascript在互聯(lián)網(wǎng)上名聲很臭,但你又很難再找到一個(gè)像它這樣如此動態(tài)、如此被廣泛使用、如此根植于我們的生活中的另外一種語言。2011-04-04
JavaScript實(shí)現(xiàn)動態(tài)表格效果
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)動態(tài)表格效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-06-06
Java中int與integer的區(qū)別(基本數(shù)據(jù)類型與引用數(shù)據(jù)類型)
這篇文章主要介紹了int與integer的區(qū)別(基本數(shù)據(jù)類型與引用數(shù)據(jù)類型),簡單的說 int 是基本數(shù)據(jù)類型,integer 是引用數(shù)據(jù)類型,具體區(qū)別詳解大家參考下本文2017-02-02
JavaScript實(shí)現(xiàn)定時(shí)頁面跳轉(zhuǎn)功能示例
這篇文章主要介紹了JavaScript實(shí)現(xiàn)定時(shí)頁面跳轉(zhuǎn)功能,涉及javascript結(jié)合時(shí)間函數(shù)定時(shí)觸發(fā)自定義函數(shù)功能操作技巧,需要的朋友可以參考下2017-02-02
Javascript中Promise的四種常用方法總結(jié)
這篇文章主要給大家總結(jié)介紹了關(guān)于Javascript中Promise的四種常用方法,分別是處理異步回調(diào)、多個(gè)異步函數(shù)同步處理、異步依賴異步回調(diào)和封裝統(tǒng)一的入口辦法或者錯誤處理,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧。2017-07-07

