2012-01-31 70 views
2

滑动解决方案如何防止“感动”事件烧制而成。我有像一个画廊坐在彼此相邻的图像,他们有一个'touchend'事件附加翻转时touchend。但是,您也可以从一个图像滑动到另一个图像(例如在iPhone上将主屏幕滑动到下一个屏幕)。当用户手指移动的元素

现在我不知道如何防止'touchend'事件发生时,我想滑到下一个图像。显然,如果我滑动,我不希望图像翻转,只有当我点击时。

我到目前为止的解决方案:

var img = $('.show-video'); 

var sliding = false; 

img.bind('touchend', function(e) { 
    if (sliding === false){ 
     Animate($(this), 'flip'); 
    } 
}); 

img.bind('touchmove', function(){ 
    sliding = true; 
    $(this).bind('touchend', function(){ 
     window.setTimeout(function(){ 
      sliding = false; 
     }, 200) 
    }) 
}); 

````

,我认为这是可以做到更好。

+0

你可以阻止其中一个事件冒泡吗?例如,在事件对象上调用'preventDefault()'和'stopPropigation()'是否对你做任何事情? – buley 2012-01-31 22:57:41

+0

是的,但我需要防止它“冒泡”下来。我有一个“ul”,其中包含“li”中的元素,当我触摸“li”时它应该做些什么,但是当我用手指滑过ul时,它应该滑动到下一页,即使手指放在李的一个上面滑动。 我已经用hacky解决方案更新了我的文章。 – 2012-02-01 20:35:45

回答

1

当谈到点击屏幕时,基本上有两个事件:touchstarttouchend。当用户触摸屏幕时,第一个事件被捕获,当他停止触摸屏幕时,第二个事件被触发。应捕获事件touchmove以分析手指的移动。

我不完全确定你想说什么,但我假设你正在捕获这些事件。你可以做的是:

  1. 而不是做touchstart上的东西做它在touchend。无论如何,这是更自然的,因为在你拿起手指后会发生什么事情
  2. touchstart之后看看是否有任何移动使用touchmove。如果没有,并且touchend被调用,请执行你想要的操作。如果有移动,做任何你想要做的滑动。

我希望这会有所帮助。

+0

我正在使用touchend,但我如何“看”如果有任何移动,我怎样才能取消“touchend”行为? – 2012-01-31 23:50:04

+0

看看[这篇文章](http://www.sitepen.com/blog/2008/07/10/touching-and-gesturing-on-the-iphone/),它很好地解释了一切。 – MMM 2012-02-01 00:10:54

0

我对此做了一个解决方法。

您已经解释了正在发生的事件,并且您还有一个线索是一个问题。

例如,假设您的图库放在#galleryOverlay上,并且您的卷轴位于其中。

然后,所有你需要做的是一样的东西

$( '#galleryOverlay')绑定( 'touchstart touchmove touchmove',函数(E){e.stopPropagation();})。

所以这样你可以将你的活动保存在你的画廊中,但是你可以防止它们在外面发生。

好运

+0

是的,但我想要点击的图像是在同一个画廊。 – 2012-02-01 00:00:20