Sentuhan yang lebih kompatibel dan lebih halus

Anda dan pengguna menginginkan aplikasi web seluler yang bereaksi dan men-scroll dengan lancar saat disentuh. Mengembangkannya seharusnya mudah, tetapi sayangnya, reaksi browser web seluler terhadap peristiwa sentuh selama scrolling dibiarkan sebagai detail penerapan dalam spesifikasi TouchEvent. Oleh karena itu, pendekatan dapat dibagi kira-kira menjadi 4 kategori. Situasi ini mengekspos ketegangan fundamental antara memberikan kelancaran scroll dan mempertahankan kontrol developer.

Empat model pemrosesan peristiwa sentuh yang berbeda?

Perbedaan perilaku di antara browser dibagi menjadi empat model.

  1. Pemrosesan peristiwa sinkron normal

    Peristiwa Touchmove dikirim selama scrolling dan setiap update scroll akan diblokir hingga penanganan touchmove selesai. Ini bagus sebagai yang paling sederhana untuk dipahami dan paling kuat tetapi buruk untuk performa scroll karena berarti setiap frame selama scroll harus memblokir thread utama.

    Browser: Browser Android (Android 4.0.4, 4.3), Mobile Safari (saat men-scroll div)

  2. Pemrosesan touchmove asinkron

    Peristiwa touchmove dikirim selama scrolling, tetapi scroll dapat dilanjutkan secara asinkron (peristiwa touchmove diabaikan setelah scroll dimulai). Hal ini dapat menyebabkan "penanganan ganda" peristiwa, misalnya, terus men-scroll setelah situs melakukan sesuatu dengan touchmove dan memanggil preventDefault pada peristiwa, yang memberi tahu browser untuk tidak menanganinya.

    Browser: Mobile Safari (saat men-scroll Dokumen), Firefox

  3. Touchmove ditekan saat men-scroll

    Peristiwa gerakan sentuh tidak dikirim setelah scroll dimulai dan tidak dilanjutkan hingga setelah peristiwa touchend. Dalam model ini, sulit untuk membedakan antara sentuhan statis dan scroll.

    Browser: Browser Samsung (peristiwa mousemove dikirim)

  4. Perbankan sentuh saat mulai scroll

    Anda tidak dapat melakukan keduanya -- kehalusan scroll dan kontrol developer -- dan model ini memperjelas kompromi antara scroll yang lancar dan penanganan peristiwa, mirip dengan semantik spesifikasi Peristiwa Pointer. Beberapa pengalaman yang mungkin perlu melacak jari, seperti tarik untuk menyegarkan, tidak memungkinkan.

    Browser: Chrome Desktop M32+, Chrome Android

Mengapa Berubah?

Chrome untuk Android saat ini menggunakan Model Lama Chrome: touchcancel saat mulai scroll, yang meningkatkan performa scroll, tetapi menyebabkan kebingungan bagi developer. Secara khusus, beberapa developer tidak mengetahui peristiwa touchcancel atau cara menanganinya, dan ini menyebabkan beberapa situs rusak. Yang lebih penting, seluruh class efek dan perilaku scroll UI seperti tarik untuk refresh, batang sembunyi, dan titik snap sulit atau tidak mungkin diterapkan dengan baik.

Daripada menambahkan fitur yang di-hardcode secara khusus untuk mendukung efek ini, Chrome bertujuan untuk berkonsentrasi pada penambahan primitif platform yang memungkinkan developer menerapkan efek ini secara langsung. Lihat Platform Web Rasional untuk penjelasan umum tentang filosofi ini.

Model Baru Chrome: Model Touchmove Asinkron Throttled

Chrome memperkenalkan perilaku baru yang dirancang untuk meningkatkan kompatibilitas dengan kode yang ditulis untuk browser lain saat men-scroll, serta memungkinkan skenario lain yang bergantung pada mendapatkan peristiwa touchmove saat men-scroll. Fitur ini diaktifkan secara default dan Anda dapat menonaktifkannya dengan tanda berikut, chrome://flags\#touch-scrolling-mode.

Perilaku baru tersebut adalah:

  • Touchmove pertama dikirim secara sinkron agar scroll dapat dibatalkan
  • Selama scroll aktif
    • Peristiwa touchmove dikirim secara asinkron
    • throttled menjadi 1 peristiwa per throttled, atau jika region slop throttled CSS terlampaui
    • Event.cancelable bernilai false
  • Jika tidak, peristiwa touchmove akan diaktifkan secara sinkron seperti biasa saat scroll aktif berhenti atau tidak memungkinkan karena batas scroll telah tercapai
  • Peristiwa touchend selalu terjadi saat pengguna mengangkat jarinya

Anda dapat mencoba demo ini di Chrome untuk Android dan beralih tanda chrome://flags\#touch-scrolling-mode untuk melihat perbedaannya.

Beri tahu kami pendapat Anda

Model Touchmove Async memiliki potensi untuk meningkatkan kompatibilitas lintas browser dan mengaktifkan class efek gestur sentuh yang baru. Kami ingin mendengar pendapat developer dan melihat hal-hal kreatif yang dapat Anda lakukan dengan fitur tersebut.