当前位置 : 主页 > 网络编程 > JavaScript >

移动端的tap

来源:互联网 收集:自由互联 发布时间:2021-06-28
移动端的click有300ms延迟,touchstart太快,touchend能减慢速度,但并不能解决根本问题,zepto的tap事件有点击穿透的bug,至此,只能自己封装一个tap事件来使用 function tap(node,callback,scope) {
移动端的click有300ms延迟,touchstart太快,touchend能减慢速度,但并不能解决根本问题,zepto的tap事件有点击穿透的bug,至此,只能自己封装一个tap事件来使用
function tap(node,callback,scope) {
    node.addEventListener("touchstart", function(e) {
        x = e.touches[0].pageX;
        y = e.touches[0].pageY;
    });
    node.addEventListener("touchend", function(e) {
        e.stopPropagation();
        e.preventDefault();
        var curx = e.changedTouches[0].pageX;
        var cury = e.changedTouches[0].pageY;
        if (Math.abs(curx - x) < 6 && Math.abs(cury - y) < 6) {
            callback.apply(scope, arguments);
        }
    });
}

//调用,假设某个button的id为btn
var btn = document.getElementById("btn");
tap(btn,function(){
    console.log("tap");
})
下面是zepto的tap事件实现源码:
if (deltaX < 30 && deltaY < 30) {
  tapTimeout = setTimeout(function() {
    var event = $.Event('tap')
    event.cancelTouch = cancelAll
    touch.el.trigger(event)

    if (touch.isDoubleTap) {
      if (touch.el) touch.el.trigger('doubleTap')
      touch = {}
    }else {
      touchTimeout = setTimeout(function() {
        touchTimeout = null
        if (touch.el) touch.el.trigger('singleTap')
        touch = {}
      }, 250)
    }
  }, 0);
}
网友评论