Toque com precisão para gestos precisos

Uma mudança foi lançada na implementação dos TouchEvents 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
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

O resultado dessa mudança é uma resposta mais suave aos gestos dos usuários, já que ela oferece maior precisão da posição dos dedos.

Usando a demonstração de Rick Byers, você pode ver a grande diferença que isso pode fazer ao desenhar lentamente um redemoinho.

Diferenças nos eventos de toque.

Isso só afetará telas com densidade de pixels maior que 1. Para entender o motivo, vamos analisar um exemplo.

Imagine que você tem uma grade 3x3 de pixels CSS e a densidade da tela é 3, ou seja, temos uma grade de 9x9 pixels físicos e os gestos do usuário da parte de cima à esquerda para a parte de baixo à direita.

Pixel CSS e grade de pixels da tela.

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

Precisão de pixel CSS durante a execução de gestos.

Não mostramos nenhuma das etapas intermediárias que os pixels físicos podem mostrar quando 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 qualquer animação ou movimento que você fizer como resultado de TouchEvents será mais suave, especialmente para gestos lentos.

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