Präzise Touchbedienung für präzise Gesten

Matt Gaunt

In der Implementierung der TouchEvents von Chrome mit Stand M37 (stabil ab 08/2014) wurde eine Änderung vorgenommen. Dadurch werden die gemeldeten Koordinaten in Gleitkommazahlen statt in Ganzzahlen geändert.

Vorher Nachher
clientX: 167
clientY: 196
SeiteX:   167
SeiteY:   196
radiusX: 26
radiusY: 26
displayX: 167
displayY: 277
clientX: 167.33299255371094
clientY: 195.66700744628906
pageX: 167.33299255371094
pageY: 195.667007446289606
195X360.195 195.6700744628906


Das Ergebnis dieser Änderung sorgt für eine flüssigere Reaktion auf Gesten des Nutzers, da die Fingerposition genauer ist.

Anhand der Demo von Rick Byers können Sie sehen, welchen großen Unterschied dies machen kann, wenn Sie langsam eine 3D-Animation ziehen.

Unterschiede bei Berührungsereignissen.

Dies wirkt sich nur auf Bildschirme mit einer Pixeldichte größer als 1 aus. Sehen wir uns ein Beispiel an, um den Grund zu verstehen.

Angenommen, Sie haben ein 3x3-Raster aus CSS-Pixeln und eine Bildschirmdichte von 3. Wir haben also ein Raster mit 9:9 physischen Pixeln und der Nutzer Gesten von oben links nach unten rechts.

CSS-Pixel und Bildschirm-Pixel-Raster.

Ursprünglich haben wir die Berührungsposition auf das nächste CSS-Pixel gerundet. Das bedeutete, dass in dieser Geste die folgenden Schritte nötig waren.

Genauigkeit des CSS-Pixels während der Geste.

Zwischenschritte, die beim Bewegen des Fingers auf den physischen Pixeln zu sehen sein könnten, werden nicht erfasst.

Jetzt, wo wir zu Gleitkommazahlen gewechselt haben, kann unsere Geste wie folgt aussehen.

Präzision bei Bewegung während der Geste.

In den meisten Fällen sind dafür keine Änderungen an Ihrem Code erforderlich. Animationen oder Bewegungen, die Sie als Ergebnis von TouchEvents ausführen, laufen jedoch reibungsloser ab, insbesondere bei langsamen Touch-Gesten.

Es ist auch geplant, diese Verbesserung auch in Safari für Mobilgeräte einzuführen: https://bugs.webkit.org/show_bug.cgi?id=133180.