تغییرات جهت‌گیری دستگاه در Chrome 50 می‌آیند

توسعه دهندگانی که روی برنامه های وب واقعیت مجازی یا واقعیت افزوده کار می کنند، بدون شک با 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 را شرح می‌دهد. آنها دسترسی سطح پایین به شتاب سنج و ژیروسکوپ را فراهم می کنند و می توانند به تجربه واقعیت مجازی دقیق تری برای کاربران شما منجر شوند.

منابع اضافی