Tocco di precisione per gesti precisi

Matt Gaunt

È stata implementata una modifica nell'implementazione degli TouchEvents di Chrome a partire dalla versione M37 (stabile nell'agosto 2014), che modifica le coordinate registrate in numeri in virgola mobile anziché in numeri interi.

Prima Dopo
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

Il risultato di questa modifica è una risposta più fluida ai gesti degli utenti, poiché offre una maggiore precisione della posizione delle dita.

Utilizzando la demo di Rick Byers, puoi vedere che differenza enorme può fare quando disegni lentamente un vortice.

Differenze negli eventi touch.

Ciò influirà solo sugli schermi con una densità di pixel superiore a 1. Per capire il motivo, vediamo un esempio.

Immagina di avere una griglia 3x3 di pixel CSS e la densità dello schermo è 3, ovvero abbiamo una griglia di pixel fisici 9x9 e i gesti dell'utente vanno da in alto a sinistra in basso a destra.

Griglia CSS e pixel dello schermo.

In origine, arrotondavamo la posizione dei tocchi al pixel CSS più vicino, il che significa che in questo gesto avresti eseguito i seguenti passaggi.

Precisione dei pixel CSS durante il gesto.

Non viene visualizzato nessuno dei passaggi intermedi che i pixel fisici potrebbero mostrare quando l'utente muove il dito.

Ora che abbiamo passato ai valori float, il nostro gesto può avere questo aspetto.

Precisione dei valori in virgola mobile durante il gesto.

Nella maggior parte dei casi, non è richiesta alcuna modifica al codice, ma significa che tutte le animazioni o i movimenti eseguiti a seguito di TouchEvents saranno più fluidi, soprattutto per i gesti lenti.

È inoltre previsto di implementare questo miglioramento anche in Safari per dispositivi mobili: https://bugs.webkit.org/show_bug.cgi?id=133180.