JavaScript防抖與節(jié)流的實(shí)現(xiàn)與注意事項(xiàng)
概念
防抖:點(diǎn)擊N次提交按鈕,只有最后一次會(huì)發(fā)出請(qǐng)求。減少無(wú)效請(qǐng)求的次數(shù)。
節(jié)流:每點(diǎn)擊一次按鈕,都會(huì)失效一段時(shí)間。降低觸發(fā)的頻率。
實(shí)現(xiàn)
/* 防抖 時(shí)限內(nèi),只有最后一次調(diào)用會(huì)執(zhí)行 */ function debounce(func, interval = 0) { let timer; return function () { if (timer) { clearTimeout(timer); } timer = setTimeout(() => { func() }, interval) } } /* 節(jié)流 執(zhí)行之后會(huì)失效一段時(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) } } }
測(cè)試
function say() { console.log(1) } var a = debounce(say, 1000) var b = throttle(say, 1000) var c = throttle(say, 1000, false) <button onclick="a()">測(cè)試防抖</button> <button onclick="b()">測(cè)試節(jié)流一</button> <button onclick="c()">測(cè)試節(jié)流二</button>
效果:
防抖。
節(jié)流,立即執(zhí)行。
節(jié)流,延時(shí)執(zhí)行。
注意事項(xiàng)
原理:閉包。每調(diào)用一次都會(huì)對(duì)應(yīng)一個(gè)閉包。
不能夠像下面這樣寫:
<button onclick="debounce(say, 1000)()">測(cè)試防抖</button> <button onclick="throttle(say, 1000)()">測(cè)試節(jié)流一</button> <button onclick="throttle(say, 1000, false)()">測(cè)試節(jié)流二</button>
不然:
總結(jié)
到此這篇關(guān)于JavaScript防抖與節(jié)流的實(shí)現(xiàn)與注意事項(xiàng)的文章就介紹到這了,更多相關(guān)JS防抖與節(jié)流內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 利用JavaScript實(shí)現(xiàn)防抖節(jié)流函數(shù)的示例代碼
- JavaScript函數(shù)防抖與函數(shù)節(jié)流的定義及使用詳解
- JS中節(jié)流和防抖函數(shù)的實(shí)現(xiàn)及區(qū)別示例
- JavaScript防抖動(dòng)與節(jié)流處理
- JavaScript中防抖和節(jié)流的區(qū)別及適用場(chǎng)景
- 詳細(xì)聊一聊js防抖節(jié)流到底是什么
- JavaScript的防抖和節(jié)流一起來(lái)了解下
- 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-03JavaScript(JS) 壓縮 / 混淆 / 格式化 批處理工具
本工具所有的功能實(shí)現(xiàn)都是由 ttp://jscompress.sinaapp.com/api 處理.(包括現(xiàn)在可以使用的這個(gè)在線壓縮)2010-12-12JavaScript 數(shù)組中插入元素的實(shí)例方法
這篇文章主要介紹了如何在 JavaScript 數(shù)組中插入元素,在本文中,我們學(xué)習(xí)了使用?splice()?方法將元素添加到數(shù)組的開(kāi)始、末尾或任何位置的各種方法,需要的朋友可以參考下2023-09-09說(shuō)明你的Javascript技術(shù)很爛的五個(gè)原因
Javascript在互聯(lián)網(wǎng)上名聲很臭,但你又很難再找到一個(gè)像它這樣如此動(dòng)態(tài)、如此被廣泛使用、如此根植于我們的生活中的另外一種語(yǔ)言。2011-04-04JavaScript實(shí)現(xiàn)動(dòng)態(tài)表格效果
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)動(dòng)態(tài)表格效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-06-06Java中int與integer的區(qū)別(基本數(shù)據(jù)類型與引用數(shù)據(jù)類型)
這篇文章主要介紹了int與integer的區(qū)別(基本數(shù)據(jù)類型與引用數(shù)據(jù)類型),簡(jiǎn)單的說(shuō) int 是基本數(shù)據(jù)類型,integer 是引用數(shù)據(jù)類型,具體區(qū)別詳解大家參考下本文2017-02-02JavaScript實(shí)現(xiàn)定時(shí)頁(yè)面跳轉(zhuǎn)功能示例
這篇文章主要介紹了JavaScript實(shí)現(xiàn)定時(shí)頁(yè)面跳轉(zhuǎn)功能,涉及javascript結(jié)合時(shí)間函數(shù)定時(shí)觸發(fā)自定義函數(shù)功能操作技巧,需要的朋友可以參考下2017-02-02Javascript中Promise的四種常用方法總結(jié)
這篇文章主要給大家總結(jié)介紹了關(guān)于Javascript中Promise的四種常用方法,分別是處理異步回調(diào)、多個(gè)異步函數(shù)同步處理、異步依賴異步回調(diào)和封裝統(tǒng)一的入口辦法或者錯(cuò)誤處理,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-07-07