Toque com precisão para gestos precisos

Uma mudança foi feita na implementação de TouchEvents (link em inglês) do Chrome a partir do M37 (estável em 08/2014), que altera as coordenadas informadas para flutuações em vez de números inteiros.

Antes Depois
clientX: 167
clientY: 196
pageX:   167
pageY:   196
RADIUS: 26
RADIUS: 26
screenX: 167
screenY: 277
clientX: 167.33299255371094
clientY: 195.66700744628906
pageX: 167.33299255371094
pageY: 195.66700744628906,56700744628906
195,66700744628906


O resultado dessa mudança significa que você tem uma resposta mais suave aos gestos do usuário, porque oferece maior precisão na posição dos dedos.

Usando a demonstração de Rick Byers, é possível ver a enorme diferença que isso pode fazer ao desenhar um espiral lentamente.

Diferenças nos eventos de contato.

Isso afetará apenas as telas que têm uma densidade de pixel maior que 1. Para entender o porquê, vamos ver um exemplo.

Imagine que você tem uma grade 3 x 3 de pixels CSS e a densidade da tela é 3, o que significa que temos uma grade de 9 x 9 pixels físicos, e o usuário gesticula do canto superior esquerdo para o canto inferior direito.

Pixel de CSS e grade de pixels da tela.

Originalmente, estávamos arredondando a posição dos toques para o pixel de CSS mais próximo, o que significa que, nesse gesto, você concluiria as próximas etapas.

Precisão de pixel de CSS durante o gesto.

Não conseguimos mostrar as etapas intermediárias que os pixels físicos podem mostrar à medida que o usuário move o dedo.

Agora que mudamos para flutuações, nosso gesto pode ficar assim.

Precisão de ponto flutuante durante o gesto.

Na maioria dos casos, isso não exige mudanças no código, mas significa que as animações ou os movimentos feitos como resultado de TouchEvents serão mais suaves, especialmente para gestos lentos.

Também planejamos incluir essa melhoria no Safari para dispositivos móveis: https://bugs.webkit.org/show_bug.cgi?id=133180.