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.