Verhindern Standard-Presse, aber nicht standardmäßig Ziehen in iOS MobileSafari?

Kontext: Web-app auf MobileSafari/iPad, sowohl full-screen und eingebettet in einem iframe

Ziel: Technik, bietet benutzerdefinierte Ereignis-Handler für Drücken und Tippen aber nicht Prise (zoom) oder Ziehen (scroll/pan). Wir wollen benutzerdefiniertes Verhalten für die Presse, sondern lassen Sie Safari Griff Scroll/Pan/Zoom noch.

Problem: Die beiden Ziele zu sein scheinen, die sich gegenseitig ausschließen. Um zu verhindern, dass das Verhalten für die Press-Geste, event.preventDefault muss einberufen werden, in der unmittelbaren Reaktion auf ontouchstart. Jedoch, um das Standard-Verhalten begeben Sie sich auf eine Ziehen, wir müssen nicht Aufruf-Ereignis.preventDefault auf den ersten ontouchstart. Einmal preventDefault heißt, es gibt keinen Weg, um das Standard-Verhalten zurück, während diese Geste Sequenz (D. H. bis alle Finger kommen). Ziehen Sie nicht erkannt, bis eine Bewegung stattgefunden hat.

Ziehen ist dargestellt, wie das einfachste Beispiel, aber wir kümmern uns darum, das Verhalten für Pinch und Doppel-Tippen Sie auf als auch. Wir wollen nie die Standard MobileSafari Drücken Sie das Verhalten von "Bild Kopieren" oder markieren Sie text.

Versuche so weit:

  • Speichern Sie die ontouchstart Ereignis und nach einer timeout, preventDefault es zu einem späteren Zeitpunkt (kurz vor dem Drücken erkannt werden würde). Keine Wirkung.
  • Hören für 'oncontextmenu'. NÖ, die Standard-Press-Verhalten wird nicht signalisiert oder werden über dieses Ereignis.
  • Verhindern, dass der Standard in allen unseren ontouch* Handler, und dann, wenn wir erkennen, Drag/Pinch-Geste simulieren, neue Ereignisse, die mit initTouchEvent und/oder initGestureEvent. Die programmatisch erzeugte events Treffer alle unsere Rückrufe, aber Safari scheint zu zahlen keine Aufmerksamkeit auf Sie, die Auslösung kein Standard-Verhalten.
  • Brechen Safari Drücken Sie die Erkennung mit einem fake bewegen. Safari bricht ein Druck auf die geringste Bewegung, aber wir lassen für ein bisschen Suppe. Simulation der ein move-Ereignis (wie oben) nur nach dem ontouchstart nicht zu Safari nicht zu erkennen, Drücken Sie, wenn der finger nicht bewegt "for real".

Wir haben ein voll funktionsfähiges set of gesture recognizers umgesetzt (in Javascript, ontouch*) im Stil von apples native iOS-gesture recognizers. Wir haben kein problem erkennen, keine gestik, wir wissen nur noch nicht von einer guten Weise zu replizieren, die Zoom - /Pan - /Double-tap Verhalten, dass Safari bietet für kostenlos.

Brauchen wir nicht code auf, wir sind auf der Suche nach einer theoretischen Lösung (jenseits von "einfach umzusetzen pan/zoom dich zu", aber wenn Sie haben eine glatte Art und Weise zu tun, dass wir interessiert sind), dass führt zum Erfolg. Wir sind auch daran interessiert, lernen über andere ähnliche versuche, dies zu tun - können wir sicher nicht der erste gewesen zu versuchen, diese?

Alternativen TL;DR: gibt es eine Möglichkeit zu verhindern, dass eine Standard-Presse (auch bekannt als Tippen-und-halten) andere als in touchstart?

InformationsquelleAutor James Baker | 2011-03-18
Schreibe einen Kommentar