vue3自定義指令實現(xiàn)按鈕防抖示例詳解
寫在前面
在實際項目開發(fā)過程中,對于按鈕的提交事件來說,我們需要限制按鈕重復點擊,避免在某個時間內(nèi)重復提交。這時候我們一般用到事件的防抖,也就是說在規(guī)定時間連續(xù)多次觸發(fā)事件,回調(diào)函數(shù)只會執(zhí)行最近的一次。但是如果在每個組件的按鈕中都添加防抖代碼,相當于是復制粘貼,增加代碼量,我們這篇文章主要就是介紹使用自定義指令設置按鈕防抖,這樣按鈕需要使用的時候就只用寫一個指令了。
自定義指令實現(xiàn)按鈕防抖
實現(xiàn)思路
- 監(jiān)聽按鈕的點擊事件
- 給點擊事件設置防抖,如果特定時間段內(nèi)多次提交,則每以最后一次重新計算時間。
代碼實現(xiàn)
1. 在directives文件夾下新建一個文件
preReClick.js內(nèi)容如下:主要是利用防抖控制按鈕是否可用
export default (app) => { app.directive('preReClick', { mounted(el, binding) { el.addEventListener('click', () => { if (!el.disabled) { el.disabled = true; setTimeout(() => { el.disabled = false; }, binding.value || 2000) } }) } }) }
2. 在main.js中引入指令文件
import { createApp } from 'vue' import App from './App.vue' import ElementPlus from 'element-plus' import 'element-plus/dist/index.css' // import myPlugin from './plugins/myPlugin' import showTip from './directives/showTip.js'; import preReClick from './directives/preReClick.js'; const app = createApp(App); app.directive('show-tip', showTip); app.use(ElementPlus).use(preReClick).mount('#app');
組件中使用
引入完成之后就可以在組件中使用v-preReClick。
<template> <div class="test-wrapper"> <div class="test-value"> <el-tooltip placement="top" :content="name">{{name}}</el-tooltip> </div> <button @click="confirm" v-preReClick>點我點我</button> </div> </template> <script setup> const name = '這是一段一段一段一段一段非常非常非常非常長長的文本'; const confirm = () => { console.log('觸發(fā)了按鈕點擊事件'); } </script> <style scoped> .test-value { width: 100%; display: inline-block; white-space: nowrap; text-overflow: ellipsis; overflow: hidden; } </style>
效果如下: 在2s時間內(nèi),多次點擊按鈕只打印了一次信息。
總結
給按鈕設置防抖防止多次提交請求不論對于用戶體驗還是后端服務請求的壓力等,都是很有必要的,使用自定義指令可以更好的維護代碼,減少代碼量。
以上就是vue3自定義指令實現(xiàn)按鈕防抖示例詳解的詳細內(nèi)容,更多關于vue3自定義指令按鈕防抖的資料請關注腳本之家其它相關文章!
相關文章
vue router動態(tài)路由設置參數(shù)可選問題
這篇文章主要介紹了vue-router動態(tài)路由設置參數(shù)可選,文中給大家提到了vue-router 動態(tài)添加 路由的方法,需要的朋友可以參考下2019-08-08Vue Element UI 中 el-table 樹形數(shù)據(jù) 
這篇文章主要介紹了Vue Element UI 中 el-table 樹形數(shù)據(jù) tree-props 多層級使用避坑指南,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧2024-01-01vue+element模態(tài)框中新增模態(tài)框和刪除功能
這篇文章主要介紹了vue+element模態(tài)框中新增模態(tài)框和刪除功能,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-06-06Vue+Video.js實現(xiàn)視頻抽幀并返回抽幀圖片Base64
這篇文章主要為大家詳細介紹了Vue如何利用Video.js實現(xiàn)視頻抽幀并返回抽幀圖片Base64,文中的示例代碼講解詳細,感興趣的小伙伴可以了解下2024-01-01vue-cli項目代理proxyTable配置exclude的方法
今天小編就為大家分享一篇vue-cli項目代理proxyTable配置exclude的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-09-09