与页面上的元素进行交互时防止滑动事件

我正在构build一个基本上是一系列幻灯片的iPad应用程序。

当我读完幻灯片后,我可以滑动到下一张幻灯片(使用Zepto的轻扫),将window.location更改为下一张幻灯片。 (滑动事件绑定到window.body,因为它需要在整个页面上工作)…

问题在于:一些幻灯片具有互动元素,如button,可拖动项目等。问题是,使用这些交互元素时触发滑动事件。

有谁知道一种方法来防止在这些情况下触发刷卡? 也许设置一个敏感度等?

我很难过

最良好的祝愿和非常感谢!

Zeptopipe理触摸事件的方式是将侦听器绑定到touchstart上的touchstarttouchendtouchmove事件。 然后,它执行计算以发送什么事件,并触发接收touchstart事件的元素上的事件。 然后这个事件通过DOM树起泡,唤起每个元素的监听器。

这给了我们两种防止刷卡事件的方法:

首先,你可以做一些事情:

 $('#my-child-element').bind('touchstart touchend touchup', function(event) { event.stopPropagation(); }); 

当你的子元素接收到一个触摸事件时,它将阻止它传播到父元素,最重要的是身体标记。 这可以防止Zepto触摸处理器执行任何操作,阻止在该元素中操作时发生轻扫,轻敲,单击,longTap和doubleTap事件。

由于滑动事件也会冒泡,因此您也可以防止这些特定事件冒泡到侦听页面更改滑动的元素:

 $('#my-child-element').bind('swipeLeft swipeRight', function(event) { event.stopPropagation(); }); 

这将允许你仍然接收Zepto生成的事件在你的子元素内,但不在外面。 Zepto tap事件对于您孩子中的所有元素仍然有效。

小提琴: http : //jsfiddle.net/bnickel/dUuUd/

希望“excludedElements”方法将帮助你,就像下面一样。

  $(".block").swipe({ swipe: function (event, direction, distance, duration, fingerCount, fingerData) { }, excludedElements: ".link, a", threshold: 0 });