Sto giocando con gli eventi touchstart e touchend sul mio iPhone. Ho creato una pagina di esempio che ha div che se la tocchi e scorri la pagina, dovrebbe restituire le coordinate y delle posizioni di inizio e fine.jQuery (Scorri contro tocco) paginaX e paginaY continua a tornare 0
link: http://jsbin.com/ibemom/2
jQuery:
var touchStartPos;
$('.theDiv')
.bind('touchstart', function(e){
touchStartPos = e.pageY;
})
.bind('touchend', function(e){
alert(touchStartPos + ' | ' + e.pageY)
})
Quando carico la pagina sul mio iPhone, tuttavia, l'avviso mantiene segnalazione entrambi i valori pari a zero. Qualcuno vede qualcosa di sbagliato in quello che ho?
UPDATE:
mi sono imbattuto in questo pezzo di codice nel progetto jQuery Mobile: https://github.com/jquery/jquery-mobile/issues/734
Un commento da esso sporgeva:
// (in iOS event.pageX and event.pageY are always 0)
non dice perché questo è il caso, ma almeno ho trovato qualcun altro che vede la stessa cosa. Scava attraverso il codice di esempio su quella pagina per vedere se la soluzione è lì.
UPDATE II:
Ebbene, dopo aver guardato attraverso il codice di esempio nel link qui sopra, sembra che questo restituirà un valore effettivo:
e.originalEvent.touches[0].pageY
Il problema è, ora mi rendo conto che non è ho proprio bisogno. Restituisce l'offset Y dell'area che ho toccato all'interno dell'oggetto che ho allegato all'evento in IN RELAZIONE AL DOCUMENTO HTML ... piuttosto che alla finestra del browser.
Il mio obiettivo è capire da dove sullo schermo è iniziato il tocco e dove è finito ... e quindi confrontare i valori. Se sono abbastanza diversi, allora asseriamo che è stato eseguito uno swipe ... piuttosto che un tocco.
UPDATE III:
sto trovando anche riferimenti a questi esempi:
e.originalEvent.touches[0].pageX
event.targetTouches[0].pageY
Anche se non riesco a ottenere quelli a funzionare. Entrambi restituiscono errori non definiti.
UPDATE IV:
Sembra che una soluzione è quello di replicare offset() nel documento stesso. Posso applicare un evento touchend al documento e quindi controllarlo.
Il problema è che il mio evento touchend si innescherà per la prima volta sull'elemento sulla mia pagina e POI lo accenderà sul documento (bubbling). Quindi non posso determinare se è stato un tocco o uno swift PRIMA che ho bisogno di capire cosa fare sull'evento touchend degli oggetti.
ancora riflettendo questo ...
strano, non knwo su cellulari, ma funziona bene con gli scatti http://jsfiddle.net/nH2PU/ – Sinetheta
Speravo che questo non sarebbe stato così tanto di una Stumper. ;) –
La stessa cosa sembra accadere in Android (2.2.2) – NoBugs