100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 按钮防抖(防止重复点击)

按钮防抖(防止重复点击)

时间:2021-06-28 04:24:55

相关推荐

按钮防抖(防止重复点击)

写在前面

在日常开发中我们时长会遇到这样的问题,当用户点击某个按钮时触发一个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 : /s/1eSjFQaY

密码:vp9c

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。