鄙人才疏学浅,新人一枚,不足之处还请谅解,写下这个也只是为了给大家分享一下我解决这个BUG的方法,也是自己的一个笔记。
首先,我们使用fastclick插件的初衷是解决“tap”事件“点透”的BUG;fastclick与tap都是利用“touch”事件来模拟“click”事件的;
然后我们来大致的了解一下fastclick的工作原理(来自网上的copy):
在我们的app中跟踪所有的TouchStart事件,在接收到touchend事件的时候,触发一个click事 件;
使用方法可找度娘;
但是问题来了,当使用了fastclick的时候,我们发现“日期”控件无法被触发了,是正常的点击时无法被触发,如果长按0.5S的样子还是可以触发的,但是问题还是已经存在,必须解决!
通过阅读fastclick的源码发现里面有个这个方法
/**
* On touch end, determine whether to send a click event at once.
*
* @param {Event} event
* @returns {boolean}
*/
FastClick.prototype.onTouchEnd = function(event) {
反正意思在上面也提到过,就是在接受到touchend事件的时候,触发一个click事件;
那么我的解决方法就是:
当touchend的时候我们判断一下他的event.target到底是啥,如果是date我们就不玩了,不要你fastclick了,用原生的去触发不就OK了,来个return false;
我的代码:
FastClick.prototype.onTouchEnd = function(event) {
/*加上这个*/
if(event.target.hasAttribute("type") && event.target.getAttribute("type") == "date"){
return false;
}
这里if里面的条件就随便写咯,自己根据项目需求而定,反正你要的是到达某个特殊的条件时给他退出就好了;
鄙人才疏学浅,新人一枚,不足之处还请谅解,写下这个也只是为了给大家分享一下我解决这个BUG的方法,也是自己的一个笔记。
!!转载还请确保是最新版本,谢谢