移动端click事件会有300ms的延时,原因是移动端屏幕双击会缩放(double tap to zoom)页面

    解决方案:
    1.禁用缩放。浏览器禁用默认的双击缩放行为并且去掉300ms的点击延迟。

    2.利用touch事件自己封装这个事件解决300ms延迟。
    原理就是:
    Ⅰ.当我们手指触摸屏幕,记录当前触摸时间。
    Ⅱ.当我们手指离开屏幕,用离开时的时间减去触摸时的时间。
    Ⅲ.如果时间小于150ms,并没有滑动过屏幕,那么我们就定义为点击。

    1. function tap (obj,callback) {
    2. var isMove = false;
    3. var startTime = 0;//记录触摸时候的时间变量
    4. obj.addEventListener('touchstart',function(e){
    5. startTime = Date.now();//记录触摸时间
    6. });
    7. obj.addEventListener('touchmove'function(e){
    8. isMove = true;//看看是否有滑动,右滑动算拖拽,不算点击
    9. });
    10. obj.addEventListener('touchend',function(e){
    11. if(!isMove && (Date.now() - startTime < 150)){//时间差小于150算点击
    12. callback && callback();//执行回调函数
    13. }
    14. isMove = false;//取反,重置
    15. startTime = 0;
    16. });
    17. }
    18. //调用
    19. tap(div,function(){//执行代码});

    .