Precyzyjny dotyk – precyzyjne gesty

Wprowadziliśmy zmianę w implementacji funkcji TouchEvents w Chrome od wersji M37 (wersja stabilna od 08.08.2014 r.), która zmienia zgłaszane współrzędne do liczby zmiennoprzecinkowej 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
pageY: 195.66700744628906


Ta zmiana zapewnia płynniejsze reagowanie na gesty użytkowników, ponieważ zwiększa dokładność ułożenia palców.

Dzięki demonstracji Ricka Byersa możesz zobaczyć, jak duża różnica może mieć tym samym efekt powolnego rysowania wiru.

Różnice w zdarzeniach dotknięcia.

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

Załóżmy, że masz siatkę 3 x 3 z pikselami CSS, a gęstość ekranu wynosi 3. Oznacza to, że mamy siatkę pikseli fizycznych 9 x 9 i gesty użytkownika od lewego górnego rogu do prawego dolnego rogu.

Piksel CSS i siatka pikseli ekranu.

Początkowo zaokrąglaliśmy pozycję dotyku do najbliższego piksela CSS, co oznaczało, że w tym geście wykonasz kolejne kroki.

Dokładność pikseli CSS podczas gestu.

Nie można było narysować żadnych kroków pośrednich, które fizyczne piksele mogły pokazać podczas przesuwania palcem przez użytkownika.

Teraz nasz gest może wyglądać tak:

Dokładność pływania podczas gestu.

W większości przypadków nie wymaga to wprowadzania zmian w kodzie, ale oznacza to, że animacje i ruchy generowane po użyciu funkcji TouchEvents będą działały płynniej, zwłaszcza w przypadku powolnych gestów.

Planujemy też wprowadzić to ulepszenie w mobilnej wersji Safari: https://bugs.webkit.org/show_bug.cgi?id=133180.