Control táctil preciso para gestos precisos

Se realizó un cambio en la implementación de TouchEvents de Chrome a partir de M37 (estabilidad a partir de 08/2014), que altera las coordenadas informadas a números de punto flotante en lugar de números enteros.

Antes Después
clientX: 167
clientY: 196
pageX:   167
pageY:   196
RadioX: 26
RadioY: 26
screenX: 167
screenY: 277
clienteX: 167.33299255371094
clienteY: 195.66700744628906
pageX: 167.33299255371094




El resultado de este cambio significa que tienes una respuesta más fluida a los gestos de los usuarios, ya que te brinda una mayor precisión en la posición de los dedos.

Con la demostración de Rick Byers, puedes ver la gran diferencia que puede hacer cuando dibujas lentamente un remolino.

Diferencias en los eventos táctiles

Esta acción solo afectará a las pantallas que tengan una densidad de píxeles superior a 1. Para comprender por qué, veamos un ejemplo.

Imagina que tienes una cuadrícula de 3 × 3 de píxeles CSS y la densidad de la pantalla es 3, lo que significa que tenemos una cuadrícula de píxeles físicos de 9 × 9 y el usuario hace un gesto desde la parte superior izquierda hasta la parte inferior derecha.

Píxel de CSS y cuadrícula de píxeles de pantalla.

Originalmente, redondeábamos la posición de los toques al píxel de CSS más cercano, lo que significaba que, en este gesto, se completarían los siguientes pasos.

Precisión de los píxeles de CSS durante un gesto

No es posible dibujar ninguno de los pasos intermedios que los píxeles físicos pueden mostrar cuando el usuario mueve el dedo.

Ahora que cambiamos a los números de punto flotante, nuestro gesto puede verse así.

Precisión de número de punto flotante durante el gesto.

En la mayoría de los casos, esto no requerirá ningún cambio en tu código, pero significa que las animaciones o movimientos que realices como resultado de TouchEvents serán más fluidos, en especial para los gestos lentos.

También planeamos implementar esta mejora en Safari para dispositivos móviles: https://bugs.webkit.org/show_bug.cgi?id=133180.