Precyzyjny dotyk – precyzyjne gesty

W wersji M37 (stabilnej z sierpnia 2014 r.) wdrożenia TouchEvents w Chrome wprowadziliśmy zmianę, która polega na przekształceniu raportowanych współrzędnych na liczby zmiennoprzecinkowe zamiast liczb całkowitych.

Przed Po
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

Dzięki tej zmianie aplikacja będzie płynniej reagować na gesty użytkownika, ponieważ będzie dokładniej wykrywać pozycję palców.

W demo Ricka Byersa możesz zobaczyć, jak wielką różnicę może to zrobić podczas wolnego rysowania zawirowania.

Różnice w zdarzeniu dotknięcia.

Dotyczy to tylko ekranów o gęstości pikseli większej niż 1. Aby zrozumieć, dlaczego tak się dzieje, rozpatrzmy to na przykładzie.

Wyobraź sobie, że masz siatkę 3 x 3 pikseli CSS, a gęstość ekranu wynosi 3, co oznacza, że masz siatkę 9 x 9 fizycznych pikseli, a gesty użytkownika są wykonywane od lewego górnego rogu do prawego dolnego rogu.

Siatka pikseli CSS i ekranu.

Pierwotnie zaokrąglenia pozycji dotyku były wykonywane do najbliższego piksela CSS, co oznacza, że w przypadku tego gestu musisz wykonać te czynności.

Dokładność do piksela w przypadku gestu CSS.

Nie uwzględniamy żadnych pośrednich kroków, które mogłyby być widoczne na fizycznych pikselach podczas przesuwania palca przez użytkownika.

Teraz, gdy używamy liczb zmiennoprzecinkowych, gest może wyglądać tak:

Dokładność obliczeń zmiennoprzecinkowych podczas wykonywania gestu.

W większości przypadków nie będzie to wymagać żadnych zmian w kodzie, ale animacje i ruchy wywoływane przez TouchEvents będą płynniejsze, zwłaszcza w przypadku powolnych gestów.

Planujemy też wprowadzić tę poprawkę w Safari na urządzenia mobilne: https://bugs.webkit.org/show_bug.cgi?id=133180.