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

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

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

ما الذي سيتغيّر؟

بدءًا من الإصدار 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 قيمًا نسبية للدرجات، ما يتطابق مع تغيير التنفيذ الذي تم إدخاله في الإصدار 50 من Chrome. من المفترض أن يؤدي هذا التغيير إلى مزيد من الاتساق مع تطبيقات الويب التي تم إنشاؤها مع وضع نظام التشغيل iOS في الاعتبار.

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

اعتبارًا من وقت كتابة هذه المقالة، يُعدّ Chrome 50 أول متصفّح يتيح استخدام العلامة الجديدة DeviceOrientationAbsoluteEvent.

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

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

مراجع إضافية