2013-09-30 8 views
9

Próbuję utworzyć stronę dla urządzeń mobilnych, która wykrywa pozycję scrollTop i przewija do góry strony, jeśli scrollTop jest mniejsza niż połowa wysokości dokumentu lub przewiń do dołu, jeśli nie.Nie można wypalić Touchend po touchmove

udało mi się osiągnąć to, że za pomocą:

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

Problemem jest to, że pożary limitu czasu, gdy użytkownik przestał przesuwać ale wciąż ma palec na ekranie.

Potem pracowałem z wydarzeniem touchend i było świetnie.

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

Użytkownik może przestanie się poruszać (palcem jeszcze na ekranie), a następnie dalej przesuwać bez wywoływania funkcji scrollToTopOrBottom().

Problemem jest to, że zdarzenie jest incosistent między przeglądarkami:

W niektórych przeglądarkach (Maxthon i Android), zdarzenie touchend pracował zgodnie z przeznaczeniem, ale w Opera Mobile i Chrome, zdarzenie touchend nie pożary. Wyjaśnienie tego jest następujące: touchend doesn't fires because touchcancel has been fired before.

Próbowałem to

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

i pomyślnie uniknąć wyzwalania touchcancel, ale niestety również unikać naturalne zachowanie przewijania.

Czy ktoś wie, jak można to osiągnąć? Nie mam pomysłów.

Dzięki.

Odpowiedz

8

spróbuj dołączyć słuchacza na obu touchend i touchcancel.

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

To zadziałało dla mnie. –

+0

Działa doskonale! Dzięki – Logic1

+0

wypróbowałem wszystko, aby touchchety działały poprawnie na Androidzie 4.4, to była jedyna rzecz, która pomogła! Dzięki! – mls3590712

1

Napisałem podkładkę, aby poradzić sobie z tym problemem Prawdopodobnie trochę za późno, ale może to pomóc komuś. https://github.com/TNT-RoX/android-swipe-shim

+0

Nie działa w domyślnej przeglądarce Android 4.4.4 .. nawet nie wywołuje zdarzeń (np. SwipeUp) – jfaron

+0

Działa, ale zdarzenia przesunięcia zależą od przewijania kontenera. Myślę, że ręczne przewijanie jest lepsze. –