Developer yang mengerjakan aplikasi web virtual atau augmented reality tentunya
sudah memahami DeviceOrientationEvent
.
Bagi yang belum tahu, “This End Up: Using Device Orientation”
memberikan ringkasan yang bagus tentang cara pemroses peristiwa deviceorientation
merespons putaran dan putaran perangkat.
Pada versi Chrome sebelumnya, nilai alpha
,
beta
,
dan gamma
yang disertakan dalam DeviceOrientationEvent
diberikan sebagai
derajat absolute
sehubungan dengan frame koordinat Bumi. Untuk memberikan derajat absolut,
Anda harus menggunakan sensor magnetometer
perangkat untuk mendeteksi medan magnet Bumi, dan hal ini pada akhirnya rentan terhadap
fluktuasi medan magnet di sekitar yang dapat mengacaukan pembacaan. Dalam prakteknya, hal ini dapat menyebabkan aplikasi web mendaftarkan banyak DeviceOrientationEvent
karena magnet di dekatnya, meskipun perangkat itu sendiri tidak benar-benar bergerak. Untuk aplikasi virtual reality yang hanya melacak
perubahan orientasi, derau magnetik ini adalah kabar buruk.
Apa yang berubah?
Mulai Chrome 50, derajat yang disertakan dalam DeviceOrientationEvent
secara default tidak lagi absolut sehubungan dengan bingkai koordinat Bumi. Artinya,
DeviceOrientationEvent
hanya boleh dipicu saat ada gerakan
sebenarnya, seperti yang terdeteksi oleh beberapa kombinasi akselerometer dan
giroskopi perangkat. Magnetometer, dan pembacaan palsu karena fluktuasi medan magnet, tidak terlihat.
Namun, saya masih memerlukan derajat absolut.
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 akan kehilangan keberuntungan. Perilaku sebelumnya, yang bergantung pada
magnetometer perangkat, tersedia melalui
peristiwa deviceorientationabsolute
baru.
Dari perspektif developer, hal ini analog dengan
DeviceOrientationEvent
yang ada, dengan jaminan bahwa properti
absolute
akan ditetapkan ke true
.
Mendeteksi apa yang didukung
Developer yang lebih memilih derajat 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 penerapan yang diperkenalkan di Chrome 50. Perubahan ini akan menghasilkan konsistensi yang lebih baik dengan aplikasi web yang ditulis dengan mempertimbangkan iOS.
Firefox (di platform selain iOS), Edge, dan Chrome versi sebelum 50 menggunakan nilai derajat absolut untukDeviceOrientationEvent
saat dijalankan di perangkat dengan sensor yang sesuai.
Saat ini, Chrome 50 adalah browser pertama yang mendukung
DeviceOrientationAbsoluteEvent
baru.
Pelacakan orientasi lanjutan dengan DeviceMotionEvent
Boris Smus memiliki
artikel yang sangat mendetail
yang menjelaskan beberapa kekurangan penggunaan DeviceOrientationEvent
, dan
cara menerapkan penggabungan sensor khusus menggunakan
DeviceMotionEvent
.
API ini memberikan akses tingkat rendah ke akselerometer dan giroskop, serta dapat mengarah
ke pengalaman virtual reality yang lebih akurat bagi pengguna Anda.