2013-09-30 7 views
9

Sto provando a creare una pagina per dispositivi mobili che rileva la posizione scrollTop e scorre nella parte superiore della pagina se scrollTop è inferiore alla metà dell'altezza del documento o scorri verso il basso se non lo è.Touchend non sparato dopo touchmode

ho realizzato che utilizzando questo:

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

Il problema è che i fuochi di timeout quando l'utente ha smesso di scorrere, ma ha ancora il dito sullo schermo.

Quindi ho lavorato con l'evento touchend ed è stato fantastico.

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

L'utente potrebbe fermato scorrimento (con il dito ancora sullo schermo) e poi continuare a scorrere senza attivare la funzione scrollToTopOrBottom().

Il problema è, tale evento viene incosistent tra i browser:

In alcuni browser (Maxthon e Android), l'evento touchend funzionato come previsto, ma in Opera Mobile e Chrome, l'evento touchend non lo fa incendi. La spiegazione per questo è che touchend doesn't fires because touchcancel has been fired before.

Ho provato questo

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

e con successo evitato l'attivazione di touchcancel, ma purtroppo anche evitato il comportamento naturale di scorrimento.

Qualcuno sa come può essere raggiunto? Sono completamente fuori di idee.

Grazie.

risposta

8

tenta di collegare l'ascoltatore sia sul touchend che sul touchcancel.

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

Questo ha funzionato per me. –

+0

ha funzionato perfettamente! Grazie – Logic1

+0

provato tutto per ottenere i touchends per funzionare correttamente su Android 4.4, questa è stata l'unica cosa che ha aiutato! Grazie! – mls3590712

1

ho scritto uno spessore di affrontare questo problema Probabilmente un po 'tardi per voi, ma potrebbe aiutare qualcuno. https://github.com/TNT-RoX/android-swipe-shim

+0

Non funziona su Android 4.4.4 browser predefinito .. non chiama nemmeno gli eventi (es. SwipeUp) – jfaron

+0

Works, ma gli eventi di scorrimento dipendono dallo scorrimento del contenitore. Penso che lo scrolling manuale sia preferibile. –