تغييرات اتجاه الجهاز قريبًا في Chrome 50

إن مطوّري تطبيقات الويب الذين يعملون على تطبيقات الواقع الافتراضي أو الواقع المعزّز على دراية تامة بـ DeviceOrientationEvent. بالنسبة إلى المستخدمين غير المبتدئين، يوفّر دليل "This End Up: Use Device اتجاه" نظرة عامة رائعة حول كيفية استجابة أداة معالجة حدث deviceorientation لالتواء والتقلب في الجهاز.

في الإصدارات السابقة من Chrome، كان يتم توفير القيم alpha وbeta وgamma المدرجة في DeviceOrientationEvent في صورة absolute درجات في ما يتعلق بالإطار الإحداثي للأرض. يتطلب توفير الدرجات المطلقة استخدام أداة استشعار مقياس المغناطيسية في الجهاز لاكتشاف المجال المغناطيسي للأرض، وهذا بدوره يكون عرضة لتقلّبات المجال المغناطيسي القريبة التي يمكن أن تؤدي إلى حساب القيم. ومن الناحية العملية، قد يؤدي ذلك إلى تسجيل تطبيق ويب مجموعة من DeviceOrientationEvents بسبب وجود مغناطيس قريب، على الرغم من أن الجهاز نفسه لا يتحرك في الواقع. بالنسبة إلى تطبيق الواقع الافتراضي الذي يهتم فقط بتتبع التغييرات في الاتجاه، فإن هذا الضوضاء المغناطيسية يعد أخبارًا سيئة.

ما هي التغييرات التي سيتم إجراؤها؟

وبدءًا من إصدار 50 من Chrome، فإن الدرجات المضمّنة في DeviceOrientationEvent لم تعد مطلقة بشكل تلقائي في ما يتعلق بإطار إحداثيات الأرض. ويعني هذا أنّه يجب تشغيل DeviceOrientationEvent فقط عند وجود حركة فعلية، كما يتم رصدها من خلال مقياس التسارع والجيروسكوب في الجهاز. مقياس المغناطيسية والقراءات الخاطئة بسبب تقلبات المجال المغناطيسي خارج الصورة.

لكنني ما زلت بحاجة إلى درجات مطلقة!

إذا كنت تكتب لغة JavaScript تحتاج إلى استخدام درجات مطلقة، مثلاً كجزء من تطبيق ويب للواقع المعزّز الذي يحتاج إلى الربط مباشرةً بالعالم المادي، لن يحالفك الحظ. ويتوفّر السلوك السابق، الذي يعتمد على مقياس المغناطيسية للجهاز، من خلال حدث 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 في الاعتبار.

تستخدم إصدارات Firefox (على الأنظمة الأساسية بخلاف iOS) وEdge وChrome قبل الإصدار 50 قيمًا مطلقة لـ DeviceOrientationEvent عند تشغيلها على الأجهزة المزوّدة بأجهزة الاستشعار المناسبة.

بالتالي، أصبح Chrome 50 هو أوّل متصفّح متوافق مع DeviceOrientationAbsoluteEvent الجديد.

تتبُّع الاتجاه المتقدم باستخدام DeviceMotionEvent

يقدّم Boris Smus مقالة مفصَّلة بشكل خيالي توضّح بعض سلبيات استخدام DeviceOrientationEvent، وكيفية تنفيذ دمج مخصّص لأجهزة الاستشعار باستخدام DeviceMotionEvent. وهي تتيح إمكانية الوصول المنخفض المستوى إلى مقياس التسارع والجيروسكوب، كما يمكن أن تقدّم للمستخدمين تجربة واقع افتراضي أكثر دقة.

مراجع إضافية