שינויים בכיוון המכשיר צפויים בקרוב ב-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 נעשה שימוש בערכי זווית יחסיים, בהתאם לשינוי ההטמעה שהוצג ב-Chrome 50. השינוי אמור להוביל ליותר עקביות באפליקציות אינטרנט שנכתבו תוך התמקדות ב-iOS.

בגרסאות של Firefox (בפלטפורמות שאינן iOS), ‏ Edge ו-Chrome שקודמות לגרסה 50, נעשה שימוש בערכי מעלות מוחלטים של DeviceOrientationEvent כשהדפדפנים פועלים במכשירים עם החיישנים המתאימים.

נכון למועד כתיבת שורות אלה, Chrome 50 הוא הדפדפן הראשון שתומך ב-DeviceOrientationAbsoluteEvent החדש.

מעקב מתקדם אחר כיוון המכשיר באמצעות DeviceMotionEvent

Boris Smus כתב מאמר מפורט מאוד שמפרט חלק מהחסרונות של השימוש ב-DeviceOrientationEvent, ומסביר איך להטמיע שילוב מותאם אישית של חיישנים באמצעות DeviceMotionEvent. הן מספקות גישה ברמה נמוכה ל-accelerometer ולג'ירוסקופ, ויכולות להוביל לחוויית מציאות מדומה מדויקת יותר למשתמשים.

מקורות מידע נוספים