Präzise Touchbedienung für präzise Gesten

Matt Gaunt

Ab M37 (stabile Version im August 2014) wurde eine Änderung an der Implementierung der TouchEvents in Chrome vorgenommen. Die gemeldeten Koordinaten werden jetzt als Gleitkommazahlen statt als Ganzzahlen zurückgegeben.

Vorher Nachher
clientX: 167
clientY: 196
pageX:   167
pageY:   196
radiusX: 26
radiusY: 26
screenX: 167
screenY: 277
clientX: 167.33299255371094
clientY: 195.66700744628906
pageX:   167.33299255371094
pageY:   195.66700744628906
radiusX: 25.843116760253906
radiusY: 25.843116760253906
screenX: 167.33334350585938
screenY: 276.66668701171875

Durch diese Änderung können Sie die Touch-Gesten der Nutzer noch besser erkennen, da die Fingerposition genauer bestimmt wird.

In der Demo von Rick Byers sehen Sie, was für einen großen Unterschied das beim langsamen Zeichnen eines Wirbels machen kann.

Unterschiede bei Touch-Ereignissen

Das wirkt sich nur auf Bildschirme mit einer Pixeldichte von über 1 aus. Sehen wir uns ein Beispiel an, um das zu verdeutlichen.

Angenommen, Sie haben ein 3 × 3-Raster mit CSS-Pixeln und die Bildschirmdichte beträgt 3. Das bedeutet, dass wir ein Raster mit 9 × 9 physischen Pixeln haben und der Nutzer von links oben nach rechts unten wischt.

CSS-Pixel und Bildschirmpixelraster

Ursprünglich wurde die Position der Berührungen auf das nächste CSS-Pixel gerundet. Bei dieser Geste würden Sie also die folgenden Schritte ausführen.

CSS-Pixelgenauigkeit bei Touch-Gesten.

Wir können keine Zwischenschritte zeichnen, die die physischen Pixel anzeigen könnten, während der Nutzer seinen Finger bewegt.

Nachdem wir zu schwimmenden Elementen gewechselt sind, kann unsere Geste so aussehen.

Gleitkommagenauigkeit während der Geste.

In den meisten Fällen sind keine Änderungen am Code erforderlich. Animationen oder Bewegungen, die auf Touch-Ereignisse zurückzuführen sind, werden jedoch flüssiger, insbesondere bei langsamen Touch-Gesten.

Diese Verbesserung soll auch für Safari auf Mobilgeräten eingeführt werden: https://bugs.webkit.org/show_bug.cgi?id=133180.