写在前面

在日常开发中我们时长会遇到这样的问题,当用户点击某个按钮时触发一个http请求,从后端查询一些数据,或者做一些操作,而当用户无意或有意快速重复的点击按钮时,导致的后果就是重复的http请求或者完全没有重复必要的一些操作,毕竟站在程序的角度来考虑问题,这些操作是消耗cpu时间,消耗内存又完全没有必要的,甚至会造成程序的卡顿,所以我们就需要一种策略去防止这种情况的发生了,并且这个过滤最好是针对按钮进行处理,从根源防止问题的发生。


ok,废话不多说,我的基本思路就是使用一个队列去记录按钮的上次点击时间,当有新的按钮被点击时,判断按钮是否已在队列中,如果不在则移除队头按钮id,在队尾添加新的按钮id,若存在则判断当前点击时间和上次点击时间间隔,判断是否可点击,并且更新点击时间。

核心代码

public boolean checkClick(int clickId) {long currentClickTime = System.currentTimeMillis();long lastClickTime = 0;boolean canClick = false;ClickInner remove = null;if (!isEmpty()) {for (ClickInner c : clickList) {if (c.getClickId() == clickId) {lastClickTime = c.getLast();c.setCurrent(currentClickTime);if (c.canClick())canClick = true;remove = c;break;}}ClickInner click = new ClickInner(clickId);click.setCurrent(currentClickTime);if (remove != null) {clickList.remove(remove);if (!canClick)click.setLast(lastClickTime);push(click);} else { //队列中无Elementif (isFull()) {clickList.get(0).setCurrent(currentClickTime);if (clickList.get(0).canClick())canClick = true;pop();push(click);} else {push(click);canClick = true;}}} else { //队空直接pushClickInner click = new ClickInner(clickId);click.setCurrent(currentClickTime);push(click);canClick = true;}return canClick;}

使用方法

    public void onBtnNewRegisterClicked() {if (!ClickUtils.getInstance().checkClick(R2.id.btn_new_register))return;//do some thing here...}

完整代码链接

ClickUtils : http://pan.baidu.com/s/1eSjFQaY
密码:vp9c

按钮防抖(防止重复点击)相关推荐

  1. vue --- 按钮的防重复点击事件

    按钮的防重复点击事件 :loading属性 当loading = true时:按钮会显示一个旋转的圆圈.此时的按钮是无法点击的 当loading = false时:按钮重新变为可点击的状态 可以通过使 ...

  2. 谈谈防止重复点击提交

    首先说说防止重复点击提交是什么意思. 我们在访问有的网站,输入表单完成以后,单击提交按钮进行提交以后,提交按钮就会变为灰色,用户不能再单击第二次,直到重新加载页面或者跳转.这样,可以一定程度上防止用户 ...

  3. 解决Vue提交按钮重复点击重复提交问题防抖

    1秒内只能提交一次 1.创建js文件preventReClick.js export default {install (Vue) {// 防止重复点击Vue.directive('preventRe ...

  4. 前端多次点击button_对于防止按钮重复点击的尝试详解

    导语:随着接触的项目增加,很多项目都是遇到同样的问题,而每次都是使用一贯的手法进行处理.有时候有些方法并不是那么的优雅甚至有些冗余,所以自己也想开始尝试不同的方法去解决同样的问题. 我经常在项目中会遇 ...

  5. 对于防止按钮重复点击的尝试

    导语:随着接触的项目增加,很多项目都是遇到同样的问题,而每次都是使用一贯的手法进行处理.有时候有些方法并不是那么的优雅甚至有些冗余,所以自己也想开始尝试不同的方法去解决同样的问题. 我经常在项目中会遇 ...

  6. uniapp点击按钮防抖

    一.在common文件夹中创建文件 // 防止处理多次点击function noMultipleClicks(methods, info) {// methods是需要点击后需要执行的函数, info ...

  7. android按钮防止重复点击事件,实例详解Android解决按钮重复点击问题

    为了防止用户或者测试MM疯狂的点击某个button,写个方法防止按钮连续点击.具体实例代码如下所示: public class BaseActivity extends Activity { prot ...

  8. 防止按钮重复点击 模型转字典 接口传参不能用汉字,要转码

    #pragma mark -- 发表评论 - (IBAction)publishBtn:(id)sender {if ([self.commentType isEqualToString:@" ...

  9. php重复点击按钮无效,完美解决UIButton按钮重复点击、多次响应的问题

    最近测试老跑过来提bug,说按钮可以点好几次,然后蹦出来好几个一样的界面出来,解决了一个地方,其他地方也会冒出一样的问题来,仔细一想,还是要从根本上解决问题,于是想了几个方法: 1.添加UIButto ...

  10. vue 防止按钮重复点击

    vue 防止按钮重复点击 在后台使用过程中,经常会因为按钮重复点击,而造成发送多次重复请求 以下方法可以避免这种情况 在man.js写入一下代码 //重复点击指令 <el-button type ...

最新文章

  1. 即时通讯:XMPP基础
  2. IDE-Android Studio -FAQ-使用习惯(不断更新 欢迎留言)
  3. 网络信息安全及常见数据加密技术
  4. Vue导出Excel表格信息
  5. java怎么将文件传到服务器,Java文件传到服务器
  6. elf文件反编译C语言,ELF文件解析和反汇编
  7. oracle 财务云优势,Oracle ERP云助力财务团队提升业务弹性
  8. 苹果电脑双系统安装及使用心得
  9. 网页配色网页设计常用色彩搭配表 《配色表》
  10. python计算各类型电影的评分,Moviedata-10M电影数据集统计分析之源码分享(Python)...
  11. 1 -- > PCI / PCIe 配置空间详解
  12. 如何把一台电脑变成服务器
  13. html 水印插件,jquery图片水印插件
  14. [Java]jhsdb查看内存内Java对象
  15. HTML免费在线文档批量翻译工具
  16. Android(Java)加载SO文件
  17. 解读ORACLE数据库的统一命名与编码规范
  18. 【论文阅读】DPLVO: Direct Point-Line Monocular Visual Odometry
  19. Ubuntu入门教程及常见错误排查
  20. 连连看c语言代码,连连看C语言代码.doc

热门文章

  1. 适合做网站优化的blog程序推荐
  2. html css字体样式颜色,css字体颜色怎么设置?
  3. Omi-touch实战 移动端图片轮播组件的封装
  4. 高通骁龙800/801/805/808/810/820/821/处理器参数对比介绍
  5. 变分自编码器——从全概率角度解读
  6. 全国42个城市地铁站点数据集合(2021年)
  7. 【教程】如何使用Java生成PDF文档?
  8. Python中OpenCV+Numpy安装配置
  9. zbrush新手教程:女性人物角色雕刻/上色零基础雕刻全流程-3D人物建模教程
  10. O2O到家业务:如何从线下拉流量,盘活新老客户?