移动端click事件会有300ms的延时,原因是移动端屏幕双击会缩放(double tap to zoom)页面
解决方案:
1.禁用缩放。浏览器禁用默认的双击缩放行为并且去掉300ms的点击延迟。
2.利用touch事件自己封装这个事件解决300ms延迟。
原理就是:
Ⅰ.当我们手指触摸屏幕,记录当前触摸时间。
Ⅱ.当我们手指离开屏幕,用离开时的时间减去触摸时的时间。
Ⅲ.如果时间小于150ms,并没有滑动过屏幕,那么我们就定义为点击。
function tap (obj,callback) {var isMove = false;var startTime = 0;//记录触摸时候的时间变量obj.addEventListener('touchstart',function(e){startTime = Date.now();//记录触摸时间});obj.addEventListener('touchmove'function(e){isMove = true;//看看是否有滑动,右滑动算拖拽,不算点击});obj.addEventListener('touchend',function(e){if(!isMove && (Date.now() - startTime < 150)){//时间差小于150算点击callback && callback();//执行回调函数}isMove = false;//取反,重置startTime = 0;});}//调用tap(div,function(){//执行代码});
.
