vue3 自定义指令-按钮防连击

本文介绍如何在Vue3中实现按钮防连击功能的自定义指令,包括指令的创建过程及其使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

除了核心功能默认的内置指令(例如v-model,v-if,v-show),vue也允许注册自定义指令。初次使用vue3,相对于vue2的小差异难免有些小不适应。针对于项目中需要的按钮防连击自定义了一个指定。记录一下~

首先我们需要了解的是vue2跟vue3中钩子函数的不同

2.x语法
bind - 指令绑定到元素后发生。只发生一次。
inserted - 元素插入父 DOM 后发生。
update - 当元素更新,但子元素尚未更新时,将调用此钩子。
componentUpdated - 一旦组件和子级被更新,就会调用这个钩子。
unbind - 一旦指令被移除,就会调用这个钩子。也只调用一次。
3.x语法
created - 新的!在元素的 attribute 或事件侦听器应用之前调用。
bind → beforeMount
inserted → mounted
beforeUpdate:新的!这是在元素本身更新之前调用的,很像组件生命周期钩子。
update → 移除!有太多的相似之处要更新,所以这是多余的,请改用 updated。
componentUpdated → updated
beforeUnmount:新的!与组件生命周期钩子类似,它将在卸载元素之前调用。
unbind -> unmounted

知道了这些以后,我们就可以根据自己的需求来自定义指令了

以下是我的需求:

  1. 在标签是直接引入就可以使用,例如<el-button v-dbClick>按钮</el-button>,点击这个按钮的时候能够禁用2秒
// 防连击 double click
app.directive('dbClick', {
    mounted(el) {
        el.addEventListener('click', (e: any) => {
            el.disabled = true;
            el.style.cursor = 'not-allowed';
            setTimeout(() => {
                el.disabled = false;
                el.style.cursor = 'pointer';
            }, 2000); // 禁用两秒
        });
    }
});

// 使用
<el-button v-dbClick>按钮</el-button>
  1. 最好可以自定义禁用时间,如果不写就禁用2秒
// 防连击 double click
// 接收参数number
app.directive('dbClick', {
    mounted(el, binding) {
        el.addEventListener('click', (e: any) => {
            const timer = binding.value || 2000; //默认2秒
            el.disabled = true;
            el.style.cursor = 'not-allowed';
            setTimeout(() => {
                el.disabled = false;
                el.style.cursor = 'pointer';
            }, timer);
        });
    }
});

// 使用
<el-button v-dbClick>按钮</el-button> //默认禁用两秒
<el-button v-dbClick='1500'>按钮</el-button> // 禁用1.5秒

以上代码可直接copy,如果问题联系我!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值