توسعه دهندگانی که روی برنامه های وب واقعیت مجازی یا واقعیت افزوده کار می کنند، بدون شک با DeviceOrientationEvent
آشنا هستند. برای افراد ناآشنا، « این پایان: با استفاده از جهتگیری دستگاه » یک نمای کلی از نحوه واکنش شنونده رویداد deviceorientation
به چرخش و چرخش دستگاه ارائه میدهد.
در نسخههای قبلی کروم، مقادیر alpha
، beta
و gamma
موجود در DeviceOrientationEvent
به صورت درجات absolute
با توجه به چارچوب مختصات زمین ارائه میشد. ارائه درجات مطلق مستلزم استفاده از حسگر مغناطیس سنج دستگاه برای تشخیص میدان مغناطیسی زمین است و این به نوبه خود مستعد نوسانات میدان مغناطیسی نزدیک است که می تواند خوانش ها را از بین ببرد. در عمل، این امر میتواند منجر به ثبت یک دسته از DeviceOrientationEvent
توسط یک برنامه وب به دلیل آهنربای نزدیک شود، علیرغم اینکه خود دستگاه واقعاً حرکت نمیکند. برای یک برنامه واقعیت مجازی که فقط به ردیابی تغییرات جهت گیری اهمیت می دهد، این نویز مغناطیسی خبر بدی است.
چه چیزی در حال تغییر است؟
با شروع Chrome 50، درجات موجود در DeviceOrientationEvent
به طور پیشفرض دیگر نسبت به چارچوب مختصات زمین مطلق نیستند. این بدان معنی است که DeviceOrientationEvent
فقط باید زمانی فعال شود که حرکت واقعی وجود داشته باشد، همانطور که توسط ترکیبی از شتاب سنج و ژیروسکوپ دستگاه تشخیص داده می شود. مغناطیسسنج و قرائتهای غلط به دلیل نوسانات میدان مغناطیسی، خارج از تصویر هستند.
اما من هنوز به مدرک مطلق نیاز دارم!
اگر جاوا اسکریپتی را مینویسید که نیاز به استفاده از درجههای مطلق دارد، شاید به عنوان بخشی از یک برنامه وب واقعیت افزوده که نیاز به نقشهبرداری مستقیم به دنیای فیزیکی دارد، شانسی ندارید. رفتار قبلی، وابسته به مغناطیس سنج دستگاه، از طریق یک رویداد جدید deviceorientationabsolute
در دسترس است. از منظر یک توسعهدهنده، مشابه DeviceOrientationEvent
موجود است، با تضمین اینکه ویژگی absolute
روی true
تنظیم شود.
تشخیص آنچه پشتیبانی می شود
برنامهنویسانی که درجههای مطلق را ترجیح میدهند، میتوانند از تشخیص ویژگی برای تعیین اینکه آیا در مرورگری هستند که از رویداد DeviceOrientationAbsoluteEvent
جدید پشتیبانی میکند یا خیر استفاده کنند:
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.
}
سازگاری بین مرورگرها
مقادیر گزارش شده در DeviceOrientationEvent
هرگز سازگار نبوده اند.
Safari و Firefox در iOS از مقادیر نسبی برای درجهها استفاده میکنند که با تغییر پیادهسازی معرفیشده در Chrome 50 مطابقت دارد. این تغییر باید به سازگاری بیشتر با برنامههای کاربردی وب که با iOS نوشته شدهاند منجر شود.
فایرفاکس (در پلتفرمهایی غیر از iOS)، Edge و نسخههای کروم قبل از 50 از مقادیر درجه مطلق برای DeviceOrientationEvent
هنگام اجرا در دستگاههایی با حسگرهای مناسب استفاده میکنند.
از زمان نگارش این مقاله، Chrome 50 اولین مرورگری است که از DeviceOrientationAbsoluteEvent
جدید پشتیبانی می کند.
ردیابی جهت گیری پیشرفته با DeviceMotionEvent
Boris Smus مقالهای با جزئیات فوقالعاده دارد که برخی از جنبههای منفی استفاده از DeviceOrientationEvent
و نحوه پیادهسازی یک ترکیب حسگر سفارشی با استفاده از DeviceMotionEvent
s را شرح میدهد. آنها دسترسی سطح پایین به شتاب سنج و ژیروسکوپ را فراهم می کنند و می توانند به تجربه واقعیت مجازی دقیق تری برای کاربران شما منجر شوند.