2013-09-30 69 views
9

我試圖爲檢測scrollTop位置的移動設備創建一個頁面,如果scrollTop低於文檔高度的一半,則滾動到頁面的頂部,如果不是,則滾動到底部。Touchend在touchmove後沒有觸發

我已經實現了,通過使用這樣的:

var ScrollTimeout; 
$(window).on('scroll',function(){ 
    clearTimeout(ScrollTimeout); 
    ScrollTimeout = setTimeout(scrollToTopOrBottom,200); 
    }); 

的問題是超時火災,當用戶已經停止滾動,但仍然有在屏幕上的手指。

然後我與touchend事件一起工作,它很棒。

$(document).on('touchend',function(){ 
    scrollToTop(); 
    }); 

用戶可以(在屏幕上用手指仍)停止滾動,然後繼續不觸發scrollToTopOrBottom()功能滾動。

的問題是,事件瀏覽器之間的incosistent:

在某些瀏覽器(傲遊和Android),在touchend事件工作按預期,但Opera移動和Chrome中,touchend事件沒有做火災。對此的解釋是touchend doesn't fires because touchcancel has been fired before

我已經試過這

$(document).on('touchmove',function(e){ 
    e.preventDefault(); 
    }); 

,併成功地避免touchcancel觸發,但不幸也避免滾動的自然行爲。

有誰知道這是如何實現的?我完全沒有想法。

謝謝。

回答

8

嘗試在touchend和touchcancel上附加偵聽器。

$(document).on('touchend touchcancel', function() { 
    doSomthing(); 
}); 
+0

這對我有用。 –

+0

工作完美!謝謝 – Logic1

+0

試圖讓所有東西在android 4.4上正常工作,這是唯一有幫助的!謝謝! – mls3590712

1

我寫了一個墊片來處理這個問題可能對你有點遲,但它可能有助於某人。 https://github.com/TNT-RoX/android-swipe-shim

+0

不適用於Android 4.4.4默認瀏覽器..甚至不會調用事件(即swipeUp) – jfaron

+0

工作,但滑動事件取決於容器的滾動。我認爲手動滾動是可取的。 –