ontouchevent-Geste scrollen Probleme
Ich bin mit dem folgenden Javascript-Code erzeugt, ontouchstart/verschieben/Ende Rückrufe auf div-Elemente für eine iOS-web-app. Das einzige problem im moment ist, dass, wenn Sie versuchen, einen Bildlauf nach oben und unten die Seite, löst das ontouchstart-element und ändert die CSS der div. Ich will die CSS das div zu ändern nur, wenn ein Benutzer das Element auswählt. Ich bin ziemlich basic mit Javascript, aber wenn jemand weiß, jeder Weg, der Javascript-Code wird nur dann ausgelöst, wenn ein Benutzer die Auswahl einer Option, es würde sehr geschätzt werden!
Dank!
TC
Javascript:
function onclickCallback( event ) {
}
function ontouchstartCallback( event ) {
event.target.className = 'choice_link_selected';
}
function ontouchmoveCallback( event ) {
event.target.className = 'choice_link_selected';
}
function ontouchendCallback( event ) {
event.target.className = 'choice_link';
}
HTML:
<div class="choice_link" onclick="onclickCallback(event);" ontouchstart="ontouchstartCallback(event);" ontouchend="ontouchendCallback(event);" ontouchmove="ontouchmoveCallback(event);">
<a href="javascript:location.href='test.php'">Test</a>
</div>
- Mehr details würden helfen, Ihre Frage ist etwas unklar. Was genau meinst du mit "ein Element auswählt"? Meinst du Benutzer tippt unten, und dann freigibt, ohne sich zu bewegen, die signifikant nach oben und unten über den Bildschirm?
Du musst angemeldet sein, um einen Kommentar abzugeben.
verwenden
event.stopPropagation()
zum stoppen des event-bubbling, und verwenden Sieevent.preventDefault()
zu vermeiden, die die Standard-handler.Vorausgesetzt, ich bin zu verstehen, was Sie gefragt haben:
Hinzufügen ontouchstartCallback:
Ersetzen Inhalt ontouchmoveCallback mit:
Was das ist zu tun:
Wenn ein touch-event beginnt, die X/Y Koordinaten werden an den berührten DOM-element. Dann auf jedes event, überprüft es, ob die Bewegung ist mehr als ein bestimmter Schwellenwert der Pixel Weg (in diesem Fall 5). Wenn dem so ist, ändern wir wieder die Klasse vorzeitig, und entfernen Sie die X/Y coords, da wir Sie nicht mehr benötigen.
Soweit ich weiß, ist es richtig zu verwenden, nur die
onmousemove
handler tauschenclassName
zu der default-Zustand. Das problem Ihrer Knopf freeze beim iPhone scrollen Beziehung zu einem anderen Problem: wenn Sie versuchen, einen Bildlauf Ihrer Ansicht nach jeder Interaktion mit der Seite rendering gesperrt ist, zum ausführen eines Bildlaufs mit einer guten Leistung und Konflikte zu vermeiden. Dann wird der Inhalt von der Seite sieht eingefroren. Das ist, warum Sie Ihre Buttons nicht wieder auf den Standard-Zustand sein, bevor das scrollen.Das traurige daran ist, dass dieses Verhalten hängt davon ab, wie Sie starten Sie den Bildlauf. Wenn Sie einen Bildlauf auf der div-Bereich und die Schaltfläche div versenden können eine
touchmove
Fall vor das scrolling-Verfahren, es funktioniert, sonst wird die css-Klasse wird wiederhergestellt werden, wenn das scrollen fertig sein wird.Einige JavaScript-touch-frameworks lösen dies, indem er den berührt, Veranstaltungen und verhindern, dass Standard-browser Verhaltensweisen (wie z.B. das scrollen) und Umsetzung Ihrer eigenen scrolling-system.
Ich weiß, es ist keine Lösung, aber könnte eine Erklärung sein.
Hoffe, es hilft.
Ciao.