Vue3 自定义指令封装实现防抖 防止按钮暴力点击

本来项目前期没有做按钮防抖功能 快结束时才想起来 然后一个个写太慢了 然后就想着封装一下

新建 directive.js

复制代码
export default {
    //自定义节流操作
    preventReClick: {
        mounted(el, binding) {
            el.addEventListener('click', () => {
                if (!el.disabled) {
                    el.disabled = true
                    setTimeout(() => {
                        el.disabled = false
                    }, binding.value || 2000) //2000ms间隔时间
                }
            })
        }
    }
}

然后在全局注册指令

复制代码
// 点击防抖注册
import dir from '../src/utils/directive'
const app = createApp(App);
app.directive('preventReClick', dir.preventReClick);

最后使用的时候 v-preventReClick如果不指定延迟时间 会默认为设置的2000

复制代码
<el-button v-preventReClick="500" type="primary" @click="login()">登录</el-button>

注: 这个只对饿了吗组件库的按钮类点击事件管用

如果是div一类的点击事件 用下面常用的方法把

复制代码
// 表情评分防抖实现
const debouncedUpdateCount = function (id, item, num) {
    if (debounceTimeout.value) {
        clearTimeout(debounceTimeout.value);
    }
    debounceTimeout.value = setTimeout(() => {
        updateCount(id, item, num);
    }, 500); // 调整延迟时间(毫秒)
};


const updateCount = (id,item,num) =>{
        /你的逻辑
    }



  <div @click="debouncedUpdateCount(item.id,item,1)" :class="{ selected: item.count == 1 }">
    <img src="../../assets/icons/garid1.png" alt="">
    <span>很差1分</span>
 </div>
相关推荐
xier12345615 分钟前
一个全新的react表格组件方案
前端
未来之窗软件服务32 分钟前
从东方仙盟筑基期看 JavaScript 动态生成图片技术-东方仙盟
开发语言·javascript·仙盟创梦ide·东方仙盟·图片技术
paopaokaka_luck33 分钟前
基于SpringBoot+Vue的志行交通法规在线模拟考试(AI问答、WebSocket即时通讯、Echarts图形化分析、随机测评)
vue.js·人工智能·spring boot·后端·websocket·echarts
程序定小飞1 小时前
基于springboot的蜗牛兼职网的设计与实现
java·数据库·vue.js·spring boot·后端·spring
不叫猫先生1 小时前
中秋连连看小游戏开发完整教程
javascript·css·小游戏·连连看
IT_陈寒2 小时前
5种JavaScript性能优化技巧:从V8引擎原理到实战提速200%
前端·人工智能·后端
蒋星熠2 小时前
Maven项目管理与构建自动化完全指南
java·前端·python·自动化·maven
sweethhheart2 小时前
【typora激活使用】mac操作方式
前端·数据库·macos
itslife2 小时前
vite 源码 - 创建服务
前端·javascript
跟着珅聪学java3 小时前
vue通过spring boot 下载文件教程
前端·spring boot·后端