移动web端里摸爬滚打这么久踩了很多坑,有必定移动web端经验的同窗必定被click困扰过。我也不列外。一路走来被虐的不行,fastclick、touchend、iscroll什么的都用过,各有优劣,都不能一步到位。最后实在是被逼无奈,翻阅了很多资料,自定义了一个tap。web
废话很少说先上效果 移动端预览 移动端!移动端!移动端!测试
插件是基于jQuery的,上代码。插件
//自定义tap $(document).on("touchstart", function(e) { if(!$(e.target).hasClass("disable")) $(e.target).data("isMoved", 0); }); $(document).on("touchmove", function(e) { if(!$(e.target).hasClass("disable")) $(e.target).data("isMoved", 1); }); $(document).on("touchend", function(e) { if(!$(e.target).hasClass("disable") && $(e.target).data("isMoved") == 0) $(e.target).trigger("tap"); });
既然说是10行代码搞定,那么就必定是10行。code
基于touchstart、touchmove、touchend这三个事件,经过事件委托的方式来实现tap事件。对象
e.target是事件源的触发节点,$(e.target)是该节点的jQuery封装对象, 默认不处理含有disable class的对象。事件
第一步:监听touchstart事件,事件触发后经过jQuery的data方法设置该对象的isMoved状态为0。
第二步:监听touchmove事件,事件触发后经过jQuery的data方法设置该对象的isMoved状态为1。
第三步:监听touchend事件,事件触发后判断该对象是否touchend过,没有则触发tap事件。zepto
把上面的10行代码放在jQuery或者zepto的最后面,用法和通常事件同样get
目前尚未作PC端的兼容,移动web端的机型测试作的不够多,后续会慢慢补上。若是在使用中遇到了什么问题能够留言。io