本来项目前期没有做按钮防抖功能 快结束时才想起来 然后一个个写太慢了 然后就想着封装一下
新建 directive.js
export default {//自定义节流操作preventReClick: {mounted(el, binding) {el.addEventListener('click', () => {if (!el.disabled) {el.disabled = truesetTimeout(() => {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>