Sanal veya artırılmış gerçeklik web uygulamaları üzerinde çalışan geliştiriciler, DeviceOrientationEvent
ile kesinlikle aşinadır.
Bu konuyla ilgili bilgi sahibi olmayanlar için "Bu Sonucu: Cihaz Yönlendirmesini Kullanma" başlıklı makalede, deviceorientation
etkinlik dinleyicisinin cihazın dönmesine nasıl yanıt verebileceğine dair mükemmel bir genel bakış sunulmaktadır.
Chrome'un önceki sürümlerinde, DeviceOrientationEvent
özelliğine dahil edilen alpha
,
beta
ve gamma
değerleri, Dünya'nın koordinat sistemine göre absolute
derece olarak sağlanıyordu. Mutlak dereceler sağlamak için cihazın manyetometre sensörünün kullanılması gerekir. Bu sensör, Dünya'nın manyetik alanını algılar ve bu da okumaları etkileyebilecek yakındaki manyetik alan dalgalanmalarına maruz kalır. Bu durum, cihazın hareket etmediği halde yakındaki bir mıknatıs nedeniyle bir web uygulamasının çok sayıda DeviceOrientationEvent
kaydetmesine neden olabilir. Yalnızca yönelimdeki değişiklikleri izlemeyi amaçlayan bir sanal gerçeklik uygulaması için bu manyetik gürültü kötü bir haberdir.
Neler değişiyor?
Chrome 50'den itibaren DeviceOrientationEvent
içine dahil edilen dereceler, varsayılan olarak artık Dünya'nın koordinat sistemine göre mutlak değildir. Bu, DeviceOrientationEvent
'lerin yalnızca cihazın ivmeölçer ve jiroskopunun bir kombinasyonu tarafından algılanan gerçek hareket olduğunda tetiklenmesi gerektiği anlamına gelir. Manyetik alan dalgalanmaları nedeniyle manyetometre ve yanlış okumalar devre dışı bırakılır.
Ancak mutlak derecelere ihtiyacım var.
Doğru mutlak dereceler kullanması gereken JavaScript'ler yazıyorsanız (ör. doğrudan fiziksel dünyayla eşlenmesi gereken bir artırılmış gerçeklik web uygulamasının parçası olarak) şansınız var. Cihazın manyetometresine bağlı olan önceki davranış, yeni bir deviceorientationabsolute
etkinliği aracılığıyla kullanılabilir.
Geliştirici açısından, mevcut DeviceOrientationEvent
ile benzerdir. absolute
özelliğinin true
olarak ayarlanacağı garanti edilir.
Desteklenenleri algılama
Mutlak dereceleri tercih eden geliştiriciler, yeni DeviceOrientationAbsoluteEvent
etkinliğini destekleyen bir tarayıcıda olup olmadıklarını belirlemek için özellik algılama özelliğini kullanabilir:
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.
}
Tarayıcılar arası uyumluluk
DeviceOrientationEvent
alanında raporlanan değerler hiçbir zaman tutarlı olmamıştır.
iOS'teki Safari ve Firefox, dereceler için göreceli değerler kullanır. Bu, Chrome 50'de kullanıma sunulan uygulama değişikliğiyle aynıdır. Bu değişiklik, iOS'e göre yazılmış web uygulamalarında daha fazla tutarlılık sağlayacaktır.
Firefox (iOS dışındaki platformlarda), Edge ve 50'den önceki Chrome sürümleri, uygun sensörlere sahip cihazlarda çalıştırıldığında DeviceOrientationEvent
için mutlak derece değerleri kullanır.
Bu yazı hazırlandığı sırada, yeni DeviceOrientationAbsoluteEvent
özelliğini destekleyen ilk tarayıcı Chrome 50'dir.
DeviceMotionEvent ile gelişmiş yön izleme
Boris Smus, DeviceOrientationEvent
kullanmanın bazı dezavantajlarını ve DeviceMotionEvent
'leri kullanarak özel bir sensör füzyonunun nasıl uygulanacağını ayrıntılı olarak açıklayan inanılmaz ayrıntılı bir makaleye sahiptir.
Bunlar, ivmeölçer ve jiroskopa düşük düzeyde erişim sağlar ve kullanıcılarınız için daha doğru bir sanal gerçeklik deneyimi sunabilir.