JavaScript防抖與節(jié)流的實現(xiàn)與注意事項
概念
防抖:點(diǎn)擊N次提交按鈕,只有最后一次會發(fā)出請求。減少無效請求的次數(shù)。
節(jié)流:每點(diǎn)擊一次按鈕,都會失效一段時間。降低觸發(fā)的頻率。
實現(xiàn)
/* 防抖 時限內(nèi),只有最后一次調(diào)用會執(zhí)行 */ function debounce(func, interval = 0) { let timer; return function () { if (timer) { clearTimeout(timer); } timer = setTimeout(() => { func() }, interval) } } /* 節(jié)流 執(zhí)行之后會失效一段時間 */ 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é)流,延時執(zhí)行。
注意事項
原理:閉包。每調(diào)用一次都會對應(yīng)一個閉包。
不能夠像下面這樣寫:
<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é)流的實現(xiàn)與注意事項的文章就介紹到這了,更多相關(guān)JS防抖與節(jié)流內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Three.js獲取鼠標(biāo)點(diǎn)擊的三維坐標(biāo)示例代碼
本篇文章主要介紹了Three.js獲取鼠標(biāo)點(diǎn)擊的三維坐標(biāo)示例代碼。具有一定的參考價值,感興趣的小伙伴們可以參考一下。2017-03-03JavaScript(JS) 壓縮 / 混淆 / 格式化 批處理工具
本工具所有的功能實現(xiàn)都是由 ttp://jscompress.sinaapp.com/api 處理.(包括現(xiàn)在可以使用的這個在線壓縮)2010-12-12Java中int與integer的區(qū)別(基本數(shù)據(jù)類型與引用數(shù)據(jù)類型)
這篇文章主要介紹了int與integer的區(qū)別(基本數(shù)據(jù)類型與引用數(shù)據(jù)類型),簡單的說 int 是基本數(shù)據(jù)類型,integer 是引用數(shù)據(jù)類型,具體區(qū)別詳解大家參考下本文2017-02-02JavaScript實現(xiàn)定時頁面跳轉(zhuǎn)功能示例
這篇文章主要介紹了JavaScript實現(xiàn)定時頁面跳轉(zhuǎn)功能,涉及javascript結(jié)合時間函數(shù)定時觸發(fā)自定義函數(shù)功能操作技巧,需要的朋友可以參考下2017-02-02Javascript中Promise的四種常用方法總結(jié)
這篇文章主要給大家總結(jié)介紹了關(guān)于Javascript中Promise的四種常用方法,分別是處理異步回調(diào)、多個異步函數(shù)同步處理、異步依賴異步回調(diào)和封裝統(tǒng)一的入口辦法或者錯誤處理,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧。2017-07-07