Perubahan Orientasi Perangkat Akan Segera hadir di Chrome 50

Developer yang mengerjakan aplikasi web virtual atau augmented reality tidak diragukan lagi familier dengan DeviceOrientationEvent. Untuk yang belum dimulai, “This End Up: Using Device Orientation” memberikan ringkasan bagus tentang cara pemroses peristiwa deviceorientation dapat merespons perangkat yang berputar dan berputar.

Pada Chrome versi sebelumnya, nilai alpha, beta, dan gamma yang disertakan dalam DeviceOrientationEvent diberikan sebagai absolute derajat sehubungan dengan frame koordinat Earth. Memberikan derajat mutlak memerlukan penggunaan sensor magnetometer perangkat untuk mendeteksi medan magnet bumi, dan yang sebaliknya rentan terhadap fluktuasi medan magnet terdekat yang dapat merusak pembacaan. Dalam praktiknya, hal ini dapat menyebabkan aplikasi web mendaftarkan banyak DeviceOrientationEvent karena adanya magnet di sekitar, meskipun perangkat itu sendiri tidak benar-benar bergerak. Untuk aplikasi virtual reality yang hanya mementingkan pelacakan perubahan orientasi, derau magnetik ini tidak baik.

Apa yang berubah?

Mulai Chrome 50, derajat yang disertakan dalam DeviceOrientationEvent secara default tidak lagi mutlak dalam kaitannya dengan bingkai koordinat Bumi. Artinya, DeviceOrientationEvent hanya boleh dipicu saat ada gerakan yang sebenarnya, seperti yang terdeteksi oleh beberapa kombinasi akselerometer dan giroskop perangkat. Magnetometer, dan hasil pembacaan yang salah akibat fluktuasi medan magnet, tidak akan terlihat.

Tapi aku masih butuh gelar mutlak!

Jika Anda menulis JavaScript yang perlu menggunakan derajat absolut, mungkin sebagai bagian dari aplikasi web augmented reality yang perlu dipetakan langsung ke dunia fisik, Anda tidak beruntung. Perilaku sebelumnya, yang bergantung pada magnetometer perangkat, tersedia melalui peristiwa deviceorientationabsolute baru. Dari perspektif developer, ini setara dengan DeviceOrientationEvent yang ada, dengan jaminan bahwa properti absolute akan ditetapkan ke true.

Mendeteksi hal yang didukung

Developer yang lebih memilih gelar absolut dapat menggunakan deteksi fitur untuk menentukan apakah mereka menggunakan browser yang mendukung peristiwa DeviceOrientationAbsoluteEvent baru:

if ('ondeviceorientationabsolute' in window) {
    // We can listen for the new deviceorientationabsolute event.
} else if ('ondeviceorientation' in window) {
    // We can still listen for deviceorientation events.
    // The `absolute` property of the event tells us whether
    // or not the degrees are absolute.
}

Kompatibilitas lintas browser

Nilai yang dilaporkan di DeviceOrientationEvent tidak pernah konsisten.

Safari dan Firefox di iOS menggunakan nilai relatif untuk derajat, yang cocok dengan perubahan implementasi yang diperkenalkan di Chrome 50. Perubahan ini akan menghasilkan konsistensi yang lebih besar pada aplikasi web yang ditulis dengan mempertimbangkan iOS.

Firefox (di platform selain iOS), Edge, dan Chrome versi sebelum 50 menggunakan nilai derajat absolut untuk DeviceOrientationEvent saat dijalankan di perangkat dengan sensor yang sesuai.

Pada saat penulisan ini, Chrome 50 adalah browser pertama yang mendukung DeviceOrientationAbsoluteEvent baru.

Pelacakan orientasi lanjutan dengan DeviceMotionEvent

Boris Smus memiliki artikel sangat mendetail yang membahas beberapa kelemahan penggunaan DeviceOrientationEvent, serta cara menerapkan fusi sensor kustom menggunakan DeviceMotionEvent. Fitur ini memberikan akses tingkat rendah ke akselerometer dan giroskop, serta dapat memberikan pengalaman virtual reality yang lebih akurat bagi pengguna.

Referensi lainnya