如何解决 快速点击多次触发的bug 期望快速点击只一次生效
var lastClick;
lockClick(){
var nowClick = new Date();
if (lastClick === undefined) {
lastClick = nowClick;
return true;
} else {
if (Math.round((nowClick.getTime() - lastClick.getTime())) > 500) {
lastClick = nowClick;
return true;
}
else {
lastClick = nowClick;
return false
}
}
} this.on('click',()=>{
if (this.lockClick()) {
//你的函数代码
}
})
解释:首先定义变量lastClick,然后定义一个锁点击事件的函数。
情况1:
刚加载,点击一次。
过程分析:
lastClick是undefined
执行lockClick函数,获取当前时间存入nowClick变量,此时lastClick === undefined 为true ,进入判断执行,lastClick值为nowClick的时间值,return true,执行了一次我的业务代码。
结果:
没问题。
情况2:
刚加载,快速点击两次,点击时间小于500MS。
过程分析:
第一次,lastClick是undefined ,执行lockClick函数,获取当前时间存入nowClick变量,此时lastClick === undefined 为true ,进入判断执行,lastClick值为nowClick的时间值,return true,执行了一次我的业务代码。
第二次,lastClick的值是上一次nowClick的时间值,执行lockClick函数,这次lastClick === undefined 为false,进入下一个条件判断执行,因为点击速度小于500,所以当前获取的时间减去上一次的时间是小于500的,此时再次把当前时间赋值给lastClick,这是为了更新上一次的时间为现在点击的时间,为了下次点击进行比较而进行的必要赋值。此时return false。那么业务代码就不会执行了。
所以,快速点击两次,只会执行一次业务代码。
结果:
没问题。
情况3:我们开始考虑,因为都是刚加载,那么第一次是对的,第二次是错的,那不是刚加载,我再次点击呢?那其实第一次点击就是上一次的时间跟现在的时间对比其实还是大于500MS的,第二次点击因为更新的时间所以时间还是小于500MS,还是不会触发业务代码。所以这种情况的第一次只是是否是undefined的区别,是undefined会执行,不是undefined因为是第一次跟上一次执行的进行对比时间大于500MS(从实际情况分析肯定大于500MS),所以这种情况也是没问题的。
结果:没问题。
如何解决 快速点击多次触发的bug 期望快速点击只一次生效的更多相关文章
- iOS中UITableView的cell点击事件不触发didSelectRowAtIndexPath(汇总)
iOS中UITableView的cell点击事件不触发didSelectRowAtIndexPath 首先分析有几种原因,以及相应的解决方法 1.UITableViewCell的userInterac ...
- label标签内含有input元素,点击事件会触发两次
**label标签内含有input元素,点击事件会触发两次** 如果你的结构是label内写input实现点击文字时候input也有相应.并且,把事件设置在了label上,那么就会执行两次了. //h ...
- jquery点击元素之外触发事件
$("#errorMsg_layer").bind("click",function(e){ if($(e.target).closest("#err ...
- 点击 a 标签触发事件而不跳转页面
有时候需要让 a 标签像 button 一样,被点击的时候触发事件而不跳转页面. <html> <body> <a id="a1" href=&quo ...
- [C# 基础知识系列]专题五:当点击按钮时触发Click事件背后发生的事情 (转载)
当我们在点击窗口中的Button控件VS会帮我们自动生成一些代码,我们只需要在Click方法中写一些自己的代码就可以实现触发Click事件后我们Click方法中代码就会执行,然而我一直有一个疑问的—— ...
- 一个大div里面包裹一个小div,里面的小div的点击事件不触发外面的这个大div的点击事件
一开始上html代码 <div id="div1" style="background: blue;width: 100px; height: 100px;&quo ...
- 2019-11-29-WPF-绑定命令在-MVVM-的-CanExecute-和-Execute-在按钮点击都没触发可能的原因...
原文:2019-11-29-WPF-绑定命令在-MVVM-的-CanExecute-和-Execute-在按钮点击都没触发可能的原因... title author date CreateTime c ...
- 2019-5-8-WPF-绑定命令在-MVVM-的-CanExecute-和-Execute-在按钮点击都没触发可能的原因...
title author date CreateTime categories WPF 绑定命令在 MVVM 的 CanExecute 和 Execute 在按钮点击都没触发可能的原因 lindexi ...
- 识别拖动与点击操作之zepto的bug
问题描述:给页面<a>标签绑定了tap事件,在移动设备上点击按钮貌似一切正常,可以响应.但是,把页面上下滑动几次之后,或者在滑动时手指滑动出移动屏幕之外,之后再点击按钮,就会发现第一次点击 ...
随机推荐
- iptables工作常用操作
正确的设置iptables命令汇总 iptables -P INPUT ACCEPT iptables -F iptables -X iptables -Z iptables -I INPUT -p ...
- mysql数据备份及恢复
备份工具 mysqldump mysqldump是mysql和mariadb上最好的备份工具之一,免费开源. mysqldump 首先查询每个数据库和每个表的结构与数据,然后把查出的所有内容导出到文本 ...
- C#,调用dll产生 "尝试读取或写入受保护的内存 。这通常指示其他内存已损坏。"的问题
由于易语言与c#做的DESC加解密方式,返回的数据不一致,所以,我用易语言写了一个dll,供c#调用, 结果在post的时候,有时候能正确返回数据,有时候则不能正常返回,而是返回空数据(c#没有做异常 ...
- 为毛GPU Cache不能移动顶点?
这篇文章属于典型的剥洋葱文,由表及里,逐步引入新的知识点,挖掘最本质的原因.这篇文的逻辑是先假设再证明,按照这个思路去阅读会比较轻松. Maya里的GPU Cache导入的几何体为什么不能编辑顶点?这 ...
- tar.gz和tar.bz2
Linux下常见压缩格式为tar.gz和tar.bz2,解压命令如下: .tar.gz tar -zxvf 文件名 .tar.bz2 tar -jxvf 文件名
- 前后台数据交换,printwriter、jsonobject、jsonarray、ajax请求,数据交换
后台代码: public void findByIDEquipment() { getResponse().setCharacterEncoding("UTF-8"); getRe ...
- Laya for H5 之Bug追踪
Laya For H5之Bug追踪 H5游戏一旦上线后,如何跟踪用户的崩溃日志呢?现在有很多第三方的工具,比如fundebug,其sdk接入简单,只需寥寥几行代码就可以追踪h5游戏的崩溃日志,bug日 ...
- 如何成功打造一款中台(PaaS)产品
现如今,很多互联网公司在向“大中台,小前台”方向靠拢,通过打造高度可用.高度可定制的中台,来支撑前台业务的快速发展.个性化功能定制.但在构建中台产品(即所谓公司级平台)的时候,如何能成功让一款产品从0 ...
- 基于墨刀实现的购物app
在观察研究购物app后 仔细分析总结了几个基础功能,实现如下的界面: 主界面:购物app的推荐界面,提供各式的样品,将整个app的多种功能进行展示. 推荐分类:根据用户浏览的宝贝,对用户进行合理推荐. ...
- Layout-2相关代码:3列布局代码演化[一]
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...