Un tocco più compatibile e fluido

Tu e i tuoi utenti volete app web mobile che reagiscano e scorrano facilmente fino al tocco. Svilupparle dovrebbe essere facile ma, sfortunatamente, il modo in cui il web mobile i browser reagiscono agli eventi di tocco durante lo scorrimento viene lasciata come implementazione dettaglio nella specifica TouchEvent. Come Di conseguenza, gli approcci possono essere suddivisi approssimativamente in quattro categorie. Questo crea una tensione fondamentale tra l'uniformità di scorrimento e e mantenere il controllo degli sviluppatori.

Quattro diversi modelli di elaborazione degli eventi touch?

Le differenze di comportamento tra i browser sono suddivise in quattro modelli.

  1. Normale elaborazione degli eventi sincroni

    Gli eventi Touchmove vengono inviati durante lo scorrimento e ogni aggiornamento dello scorrimento si blocca fino al completamento della gestione di touchmove. È l'opzione più semplice da capire e la più efficace, ma anche la più efficace per le prestazioni di scorrimento, perché significa che ogni frame durante lo scorrimento deve bloccarsi sul thread principale.

    Browser: browser Android (Android 4.0.4, 4.3), Safari mobile (quando si scorre l'elemento div)

  2. Elaborazione asincrona del movimento tattile

    Gli eventi touchmove vengono inviati durante lo scorrimento, ma può procedere in modo asincrono (l'evento touchmove viene ignorato dopo l'inizio dello scorrimento). Questo può portare a una "doppia gestione" di eventi, ad esempio continuando a scorrere dopo che il sito web ha eseguito un'operazione con touchmove e chiama preventDefault sull'evento, indicando al browser di non gestirlo.

    Browser: Safari mobile (quando si scorre il documento), Firefox

  3. Touchmove soppresso durante lo scorrimento

    Gli eventi Touchmove non vengono inviati dopo l'inizio dello scorrimento e riprendono solo dopo l'evento touchend. In questo modello, è difficile distinguere un tocco stazionario e una pergamena.

    Browser: browser Samsung (eventi Mousemove inviati)

  4. Annulla tocco all'inizio dello scorrimento

    Non si possono avere entrambi i modi, ovvero la fluidità dello scorrimento e il controllo per gli sviluppatori, e questo modello chiarisce il compromesso tra scorrimento fluido e gestione degli eventi, in modo simile alla semantica della specifica Eventi puntatore. Alcune esperienze che potrebbero richiedere il monitoraggio del dito, come il pull-to-refresh, non sono possibili.

    Browser: Chrome Desktop M32 e versioni successive, Chrome Android

Perché cambiare?

Al momento Chrome per Android utilizza il vecchio modello di Chrome: touchcancel allo scorrimento il che migliora le prestazioni dello scorrimento, ma crea confusione negli sviluppatori. In particolare, alcuni sviluppatori non sono a conoscenza dell'evento touchcancel o di come occuparsene, con il conseguente malfunzionamento di alcuni siti web. Ma soprattutto, un'intera classe di effetti e comportamenti di scorrimento dell'interfaccia utente, come pull-to-refresh, Le barre nascoste e gli snap point sono difficili o impossibili da implementare beh.

Invece di aggiungere funzionalità hardcoded in modo specifico per supportare questi effetti, Chrome punta a concentrarsi sull'aggiunta di primitive di piattaforma che consentano agli sviluppatori di implementare direttamente questi effetti. Consulta Una piattaforma web razionale per un'esposizione generale di questa filosofia.

Nuovo modello di Chrome: il modello Touchmove asincrono limitato

Chrome sta introducendo un nuovo comportamento progettato per migliorare la compatibilità con codice scritto per altri browser quando scorrimento, oltre ad attivare altri scenari che dipendono da come toccare eventi durante lo scorrimento. Questa funzione è attiva per impostazione predefinita e puoi attivarla disattivata con il seguente flag: chrome://flags\#touch-scrolling-mode.

Il nuovo comportamento è:

  • Il primo touchmove viene inviato in modo sincrono per consentire lo scorrimento annullata
  • Durante lo scorrimento attivo
    • Gli eventi touchmove vengono inviati in modo asincrono
    • Limitato a 1 evento ogni 200 ms o se una regione con slop 15px CSS viene superato
    • Event.cancelable è false
  • Altrimenti, gli eventi touchmove si attivano in modo sincrono come di consueto quando viene eseguito lo scorrimento attivo. termina o non è possibile perché è stato raggiunto il limite di scorrimento
  • Un evento di touchend si verifica sempre quando l'utente solleva il dito

Puoi provare questa demo in Chrome per Android e attivare/disattivare chrome://flags\#touch-scrolling-mode per vedere la differenza.

Facci sapere la tua opinione

Il modello Async Touchmove può migliorare le prestazioni e attivare una nuova classe di effetti per i gesti tattili. Siamo interessati nel conoscere l'opinione degli sviluppatori e nel vedere le creatività che puoi realizzare con essa.