定时器防双击
- 封装
/*
*定时器防双击
*参数:seconds - 多少毫秒后可以点击,默认500
*返回 - Boolean,是否已点击,true-是
*/
//封装
let isClick = false
function preventDoubleClick(seconds) {
if (isClick) {
return true
} else {
isClick = true
setTimeout(() => {
isClick = false
}, seconds || 500)
return false
}
}
//调用
function handle(){
if(preventDoubleClick()) return
//业务逻辑
}
- 缺点
- 只能防止固定时间内的双击操作
- seconds太大,影响体验
- 接口调用慢时(超过senconds),无法防止再次点击
- 购买等重要操作,前端不能真正防重(后端也需要)
- 优点
- 调用方便
- 实现
- 点击按钮,打开mask弹窗,禁止操作(类似小程序showLoading)
- 所有业务完成后,关闭弹窗
- 问题:
- 业务流程不需要弹窗,或者过程中已有其他弹窗
- 业务的所有结束点,均需关闭弹窗
- 实现
- 类似用一个变量替代弹窗的效果
- 变量的true/false代表是否已经点击,该功能执行完成后,重置变量
- 问题
- 变量如果未重置,则按钮不可点击
- 业务功能复杂,则重置代码地方多
- 使用组件,可能出现组件通信和公共变量使用,无法很好封装,且代码比较分散
- 有点
- 真正的防止双击,且无副作用(弹窗)
推荐阅读
- JavaScript|JavaScript: BOM对象 和 DOM 对象的增删改查
- 前端|web前端dya07--ES6高级语法的转化&render&vue与webpack&export
- JS/JavaScript|JS/JavaScript CRC8多项式 16进制
- JS|VUE学习笔记[30-46]
- 腾讯TEG实习|腾讯实习——Vue解决跨域请求
- 地图|高德地图清除指定覆盖物 自定义覆盖物样式(完整dome)
- Pyecharts|Pyecharts 猎聘招聘数据可视化
- flex|C语言-使用goto语句从循环中跳出
- HTML+Js实战项目|在网页中实现icon小图标的几种方法
- js中国标准时间转化为年月日,时间戳