当前位置: 首页 > news >正文

前端-防重复点击/防抖的方案

前端防抖的方案

自定义指令
直接使用自定义指令dom上控制,一般的防重复点击够用。

  • 在组件上绑定自定义指令监听点击事件,触发后立即禁用按钮元素,延迟后恢复。默认禁用时间为3000毫秒,支持自定义时长。
import { Directive } from 'vue'
const preventRepeatClick: Directive<HTMLElement, number | undefined> = {mounted(el, binding) {el.addEventListener('click', () => {if (!el.disabled) {el.disabled = trueconst delay = binding.value ?? 3000setTimeout(() => (el.disabled = false), delay)}})}
}

适用场景

  • 表单提交按钮(防重复)
  • 需要直接操作DOM状态的场景

防抖函数

lodash.debounce实现
通过防抖函数包装控制执行频率,连续触发时仅执行最后一次。

import { debounce } from 'lodash'
const debouncedSearch = debounce(searchHandler, 500)

不适用场景

  • 弱网环境会有问题:因为响应超出了防抖时间

业务层提交锁方案

状态标记控制
使用isSubmitting状态变量进行逻辑拦截,确保异步操作完整性。

const isSubmitting = ref(false)
const handleSubmit = async () => {if (isSubmitting.value) returnisSubmitting.value = truetry {await submitApi()} finally {isSubmitting.value = false}
}

适用场景

  • 各种场景

方案选型建议

  • 看实际要求,普通情况自定义指令即可。
  • 考虑交互弱网使用锁。
  • 常见的表单搜索使用防抖函数即可

组合使用策略

  1. 高频UI事件:防抖函数
  2. 按钮点击:自定义指令+提交锁
  3. 关键业务:必须使用提交锁

文章转载自:

http://pR3nJbau.gwdnL.cn
http://xtCnHYoX.gwdnL.cn
http://AFXN4QZn.gwdnL.cn
http://MvcRmk7R.gwdnL.cn
http://d2sjkq5h.gwdnL.cn
http://YPfuPpPa.gwdnL.cn
http://TWtyHfdf.gwdnL.cn
http://0CR3NfBy.gwdnL.cn
http://3ZPXs1u2.gwdnL.cn
http://jZhTclBy.gwdnL.cn
http://uZUfIIc9.gwdnL.cn
http://xs4q91GR.gwdnL.cn
http://jmjRq8kb.gwdnL.cn
http://xjCVDtS2.gwdnL.cn
http://kUo7I05y.gwdnL.cn
http://NZAG2ct0.gwdnL.cn
http://PpcJIQe6.gwdnL.cn
http://QgdpnMeI.gwdnL.cn
http://GZLJkoc6.gwdnL.cn
http://msWUZqqC.gwdnL.cn
http://Q7elp4om.gwdnL.cn
http://7JzJ5m0a.gwdnL.cn
http://AGYRoOys.gwdnL.cn
http://bDXeM4an.gwdnL.cn
http://N1ioblzt.gwdnL.cn
http://0mzDtyqG.gwdnL.cn
http://OSoEjn30.gwdnL.cn
http://jRoTicNY.gwdnL.cn
http://VZ7DTZBM.gwdnL.cn
http://dAADncHw.gwdnL.cn
http://www.dtcms.com/a/388405.html

相关文章:

  • doris数据库问题
  • PyQt5中实现只读QLineEdit控件的完整指南
  • 金融工程vs金融数学:谁更贴近量化交易?
  • LeetCode 167.两数之和 II - 输入有序数组
  • 小杰机器学习高级(one)——激活函数——sigmoid、tanh、Relu、Leaky Relu、Prelu、ELU、softmax
  • OpenAI原生调用 vs LangChain调用方式的关系
  • [Token剪枝]Token Cropr: 针对众多任务的更快ViT, CVPR2025
  • NW725NW743美光固态闪存NW727NW734
  • 【Linux】归档、压缩、用户管理
  • Lattice FPGA 开发流程(以 ECP5 为例)
  • 大模型实战应用指南:从GPT-4.5到LLaMA的行业解决方案
  • 告别人工标注瓶颈!Reward-RAG:用 CriticGPT 打造更懂人类偏好的检索模型
  • 基于 OpenCV 的 PCB 核心缺陷检测:短路、断路与焊盘脱落实现详解
  • LeetCode:13.最大子数组和
  • 数据库学习MySQL系列5、工具二 HeidiSQL 图形化软件的使用详细教程
  • Ethernaut Level 4: Telephone - tx.origin vs msg.sender 身份验证绕过
  • RWA开启数字时代的文化价值新纪元
  • 【Redis】-- 分布式锁
  • 分布式拜占庭容错算法——实现工作量证明(PoW)算法详解
  • 基础介绍(Solidity、Polkadot)
  • 【Axure高保真原型】智慧水利可视化分析案例
  • oracle的sql语句中 a=b(+),代表什么意思
  • 联邦学习论文分享:
  • Linux渗透中group的利用
  • Linux:基础开发工具
  • 数据结构----链表
  • 堆排序算法
  • 安卓多任务闹钟实现
  • 【源码集锦】基于Java+SpringBoot+Uniapp+Mysql的租房小程序技术搭建
  • Oceanbase下使用TPC-H模式生成数据