【问题标题】:jQuery Mobile swipe event also produces tap: how to ignore resulting tap event?jQuery Mobile 滑动事件也产生点击:如何忽略产生的点击事件?
【发布时间】:2013-12-11 02:32:47
【问题描述】:

我们需要绑定到 DIV 的 swipetap 事件。然而,jQuery Mobile (1.3) 中的swipe 事件也会产生tap 事件。我们需要阻止滑动传播到点击处理程序,但preventDefault 不起作用。换句话说,我们希望滑动只触发滑动处理程序而不触发点击处理程序。

这样做的正确方法是什么?

【问题讨论】:

    标签: javascript jquery html jquery-mobile jquery-events


    【解决方案1】:

    swipe 总是在tap 之前发生,所以试试这个:

    var swipped;    
    $(element).on('swipe tap',function(evt){
        if(evt.type=='swipe') {
            swipped = true;
            if(evt.swipestart.coords[0]>evt.swipestop.coords[0]){
                console.log('swipe left to right')
            } else {
                console.log('swipe right to left')
            }
        } else {
            if(swipped){ // ignore this tap
                swipped=false;
            } else {
                console.log('tap');
            }
        }
    });
    

    【讨论】:

      【解决方案2】:

      你可以在你想监听swipe事件的元素上使用unbind函数。

      $(ele).unbind("tap taphold");
      

      【讨论】:

      • 不幸的是,我们需要为同一个元素绑定两个事件。
      • 在这种情况下,我认为你应该推迟 1 秒后执行点击回调。如果在这 1 秒内发生了滑动,则回调被丢弃,否则将被触发。
      • 感谢这已经三岁了...但是请您给我们演示一下您的意思吗?您甚至可能会因回答问题而获得布朗尼积分:)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-07
      • 2013-06-13
      • 1970-01-01
      • 1970-01-01
      • 2010-11-09
      • 1970-01-01
      • 2013-12-20
      相关资源
      最近更新 更多