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 期望快速点击只一次生效的更多相关文章

  1. iOS中UITableView的cell点击事件不触发didSelectRowAtIndexPath(汇总)

    iOS中UITableView的cell点击事件不触发didSelectRowAtIndexPath 首先分析有几种原因,以及相应的解决方法 1.UITableViewCell的userInterac ...

  2. label标签内含有input元素,点击事件会触发两次

    **label标签内含有input元素,点击事件会触发两次** 如果你的结构是label内写input实现点击文字时候input也有相应.并且,把事件设置在了label上,那么就会执行两次了. //h ...

  3. jquery点击元素之外触发事件

    $("#errorMsg_layer").bind("click",function(e){ if($(e.target).closest("#err ...

  4. 点击 a 标签触发事件而不跳转页面

    有时候需要让 a 标签像 button 一样,被点击的时候触发事件而不跳转页面. <html> <body> <a id="a1" href=&quo ...

  5. [C# 基础知识系列]专题五:当点击按钮时触发Click事件背后发生的事情 (转载)

    当我们在点击窗口中的Button控件VS会帮我们自动生成一些代码,我们只需要在Click方法中写一些自己的代码就可以实现触发Click事件后我们Click方法中代码就会执行,然而我一直有一个疑问的—— ...

  6. 一个大div里面包裹一个小div,里面的小div的点击事件不触发外面的这个大div的点击事件

    一开始上html代码 <div id="div1" style="background: blue;width: 100px; height: 100px;&quo ...

  7. 2019-11-29-WPF-绑定命令在-MVVM-的-CanExecute-和-Execute-在按钮点击都没触发可能的原因...

    原文:2019-11-29-WPF-绑定命令在-MVVM-的-CanExecute-和-Execute-在按钮点击都没触发可能的原因... title author date CreateTime c ...

  8. 2019-5-8-WPF-绑定命令在-MVVM-的-CanExecute-和-Execute-在按钮点击都没触发可能的原因...

    title author date CreateTime categories WPF 绑定命令在 MVVM 的 CanExecute 和 Execute 在按钮点击都没触发可能的原因 lindexi ...

  9. 识别拖动与点击操作之zepto的bug

    问题描述:给页面<a>标签绑定了tap事件,在移动设备上点击按钮貌似一切正常,可以响应.但是,把页面上下滑动几次之后,或者在滑动时手指滑动出移动屏幕之外,之后再点击按钮,就会发现第一次点击 ...

随机推荐

  1. myql 格式化日期

    date_format(a.balance_date,'%Y-%m')= date_format(#{balanceDate},'%Y-%m')

  2. Ant将Jmeter的jtl文件转为html文件报“前言中不允许有内容”

    ant执行jmeter的脚本的时候提示“Fatal Error! 前言中不允许有内容” 解决办法: 在jmeter的bin目录中找到jmeter.properties: 将文件中#jmeter.sav ...

  3. Spring Boot - AOP(面向切面)

    AOP 全称 Aspect Oriented Programming(面向切面),AOP主要实现的目的是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分 ...

  4. STM32 USB-三个HID-interface 复合(组合)设备的代码实现-基于固件库(原创)

    一.概论: 在STM32_USB-FS-Device_Lib_V4.1.0的Custom_HID工程基础上进行修改: 开发一款设备,有三个HID接口,mouse+pen+自定义HID 其中:0_HID ...

  5. 精读《C++ primer》学习笔记(第一至三章)

    第一章: 重要知识点: 类型:一种类型不仅定义了数据元素的内容,还定义了这类数据上可以进行的运算:所以说类定义,实际上就是定义了一种数据类型: >>和<<运算符返回其左侧的运算 ...

  6. netty拆包粘包

    客户端 tcp udp socket网络编程接口 http/webservice mqtt/xmpp 自定义RPC (dubbo) 应用层 服务端 ServerSocket ss = new serv ...

  7. 同一台电脑配置多个JBoss

    在jboss中找到对应的文件,修改对应文件端口可解决两个以上jboss的端口冲突问题 不同的jboss修改的端口要区别开来,本例所用jboss版本为JBoss4.2.2.GA 文件端口: 8083,1 ...

  8. Ubuntu 15.10 下Scala 操作Redis Cluster

    1 前言 Redis Standalone,Redis Cluster的安装在前面介绍过,地址:http://www.cnblogs.com/liuchangchun/p/5063477.html,这 ...

  9. Kong(V1.0.2)Network & Firewall

    介绍 在本节中,您将找到关于Kong推荐的网络和防火墙设置的摘要.PortsKong使用多个连接用于不同的目的. 代理 管理api Proxy 代理端口是Kong接收传入流量的地方.有两个端口具有以下 ...

  10. 2018-2019-2 20165312《网络攻防技术》Exp4 恶意代码分析

    2018-2019-2 20165312<网络攻防技术>Exp4 恶意代码分析 知识点总结 1.有关schtasks schtacks的作用:安排命令和程序定期运行或在指定时间内运行.从计 ...