一文教你如何一個(gè)Vue指令搞定函數(shù)防抖
說在前面
防抖(Debounce)在前端開發(fā)中是一種常用的技術(shù),它的作用是限制某個(gè)操作在短時(shí)間內(nèi)的頻繁觸發(fā),只有在一定的間隔時(shí)間內(nèi)才執(zhí)行相應(yīng)的操作。
什么是防抖
函數(shù)防抖 方法是一個(gè)函數(shù),它的執(zhí)行被延遲了 t 毫秒,如果在這個(gè)時(shí)間窗口內(nèi)再次調(diào)用它,它的執(zhí)行將被取消。你編寫的防抖函數(shù)也應(yīng)該接收傳遞的參數(shù)。
例如,假設(shè) t = 50ms ,函數(shù)分別在 30ms 、 60ms 和 100ms 時(shí)調(diào)用。前兩個(gè)函數(shù)調(diào)用將被取消,第三個(gè)函數(shù)調(diào)用將在 150ms 執(zhí)行。如果改為 t = 35ms ,則第一個(gè)調(diào)用將被取消,第二個(gè)調(diào)用將在 95ms 執(zhí)行,第三個(gè)調(diào)用將在 135ms 執(zhí)行。
效果展示
實(shí)現(xiàn)原理
防抖函數(shù)實(shí)現(xiàn)步驟
- 1、當(dāng)需要執(zhí)行某個(gè)操作時(shí),首先設(shè)置一個(gè)定時(shí)器。
- 2、如果在規(guī)定的時(shí)間間隔內(nèi)再次觸發(fā)了該操作,則清除之前的定時(shí)器。
- 3、重新設(shè)置一個(gè)新的定時(shí)器,以確保在最后一次觸發(fā)操作后的一段時(shí)間內(nèi)不再觸發(fā)操作。
- 4、最終在最后一次觸發(fā)操作后的時(shí)間間隔結(jié)束時(shí)執(zhí)行相應(yīng)的操作。
基本的防抖函數(shù)示例
function debounce(func, delay) { let timer; return function() { const context = this; const args = arguments; clearTimeout(timer); timer = setTimeout(() => { func.apply(context, args); }, delay); }; } // 創(chuàng)建一個(gè)防抖函數(shù) const debouncedFunction = debounce(() => { console.log('Debounced function is executed'); }, 300); // 設(shè)置延遲時(shí)間為300毫秒 // 在需要防抖的事件中調(diào)用防抖函數(shù) window.addEventListener('scroll', debouncedFunction);
這種基礎(chǔ)的寫法應(yīng)該大部分同學(xué)都可以很輕松的寫出來,這里就不過多贅述了,主要看下怎么將其封裝成一個(gè)vue指令來使用。
封裝成vue指令
指令代碼
export default { inserted: function (el, binding) { const arg = binding.arg || 500; let timer; el.addEventListener("input", (e) => { clearTimeout(timer); timer = setTimeout(() => { binding.value(e); }, arg); // 設(shè)置延遲時(shí)間,單位為毫秒 }); }, };
這段代碼定義了一個(gè)自定義指令對(duì)象,其中的 inserted 方法會(huì)在指令綁定到元素上時(shí)被調(diào)用。在這里,我們將該指令綁定到輸入框上。
當(dāng)輸入框觸發(fā)輸入事件(input)時(shí),會(huì)執(zhí)行回調(diào)函數(shù)。在回調(diào)函數(shù)中,通過 clearTimeout 清除之前的定時(shí)器,并重新設(shè)置一個(gè)新的定時(shí)器。這樣做的目的是確保在用戶連續(xù)輸入時(shí)只有最后一次輸入的內(nèi)容被處理。
在新的定時(shí)器中,會(huì)等待一段時(shí)間(由 arg 參數(shù)指定,單位為毫秒),然后執(zhí)行 binding.value(e),也就是調(diào)用傳入指令的值的函數(shù)并傳遞事件對(duì)象 e。這樣就實(shí)現(xiàn)了在輸入框輸入時(shí)應(yīng)用防抖函數(shù)的效果。
指令使用
<input v-JDebounce:1000="handleInput" class="input-content" /> methods: { handleInput(event) { const value = event.target.value; if (value === "") { this.inputContent = ""; return; } this.inputContent += `\n輸入了:${value}`; }, }
v-JDebounce:1000
:這是一個(gè)自定義指令的綁定,JDebounce 是指令的名稱,1000 是指令參數(shù),表示延遲時(shí)間為1000毫秒。handleInput
:這是一個(gè)函數(shù)名,用于處理輸入框的輸入事件。
組件庫
組件文檔
目前該組件也已經(jīng)收錄到我的組件庫,組件文檔地址如下: jyeontu.xyz/jvuewheel/#/JDebounceView
組件內(nèi)容
組件庫中還有許多好玩有趣的組件,如:
- 懸浮按鈕
- 評(píng)論組件
- 詞云
- 瀑布流照片容器
- 視頻動(dòng)態(tài)封面
- 3D輪播圖
- web桌寵
- 貢獻(xiàn)度面板
- 拖拽上傳
- 自動(dòng)補(bǔ)全輸入框
- 圖片滑塊驗(yàn)證
等等……
組件庫源碼
組件庫已開源到gitee,有興趣的也可以到這里看看:gitee.com/zheng_yongtao/jyeontu-component-warehouse
到此這篇關(guān)于一文教你如何一個(gè)Vue指令搞定函數(shù)防抖的文章就介紹到這了,更多相關(guān)Vue函數(shù)防抖內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vue Element前端應(yīng)用開發(fā)之根據(jù)ABP后端接口實(shí)現(xiàn)前端展示
本篇著重介紹基于ABP后端接口信息,實(shí)現(xiàn)對(duì)前端界面的開發(fā)工作。2021-05-05手動(dòng)掛載Vue3.0組件到DOM節(jié)點(diǎn)的方法
在VUE應(yīng)用中,經(jīng)常會(huì)使用一些非vue實(shí)現(xiàn)的js庫,這些js庫可能要求外部傳入一些界面DOM節(jié)點(diǎn),本文主要介紹了手動(dòng)掛載Vue3.0組件到DOM節(jié)點(diǎn)的方法,感興趣的可以了解一下2024-08-08Vue之使用mockjs生成模擬數(shù)據(jù)案例詳解
這篇文章主要介紹了Vue之使用mockjs生成模擬數(shù)據(jù)案例詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-09-09詳解vuex中mutations方法的使用與實(shí)現(xiàn)
這篇文章主要為大家詳細(xì)介紹了vuex中mutations方法的使用與實(shí)現(xiàn)的相關(guān)知識(shí),文中的示例代碼簡潔易懂,具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以跟隨小編一起了解一下2023-11-11vue3?ts編寫echart是tooltip無法展示的解決
這篇文章主要介紹了vue3?ts編寫echart是tooltip無法展示的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10Vue項(xiàng)目優(yōu)化打包之前端必備加分項(xiàng)
相信現(xiàn)在很多人都是用Vue做過了各種項(xiàng)目,但是項(xiàng)目代碼做完和上線并不代表這結(jié)束,還有上線以后的優(yōu)化也是很重要的一點(diǎn),這篇文章主要給大家介紹了關(guān)于Vue項(xiàng)目優(yōu)化打包的相關(guān)資料,需要的朋友可以參考下2021-09-09vue中動(dòng)態(tài)select的使用方法示例
這篇文章主要介紹了vue中動(dòng)態(tài)select的使用方法,結(jié)合實(shí)例形式分析了vue.js使用動(dòng)態(tài)select創(chuàng)建下拉菜單相關(guān)實(shí)現(xiàn)技巧與操作注意事項(xiàng),需要的朋友可以參考下2019-10-10Vue 框架之動(dòng)態(tài)綁定 css 樣式實(shí)例分析
這篇文章主要介紹了Vue 框架之動(dòng)態(tài)綁定 css 樣式的方法,本文通過分享小實(shí)例給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-11-11