2012-01-31 27 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