إنّ المطوّرين الذين يعملون على تطبيقات الويب للواقع الافتراضي أو الواقع المعزّز على دراية
بلا شكّ بـ 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
.
وتوفّر هذه الأدوات إمكانية الوصول إلى مستويات منخفضة من مقياس التسارع والجيروسكوب، ويمكن أن تؤدي
إلى توفير تجربة واقع افتراضي أكثر دقة للمستخدمين.