שינויים בכיוון המכשיר צפויים בקרוב ב-Chrome 50

ג'ף פוזניק
ג'ף פוזניק

מפתחים שעובדים על אפליקציות אינטרנט וירטואליות או אפליקציות של מציאות רבודה מוכרים ללא ספק את DeviceOrientationEvent. הסרטון "This End Up: שימוש באוריינטציה של המכשיר" מספק סקירה כללית נהדרת על האופן שבו מאזין האירועים של deviceorientation יכול להגיב לפיתולים ולסיבוב של המכשיר.

בגרסאות קודמות של Chrome, הערכים alpha, beta ו-gamma שכלולים בפונקציה DeviceOrientationEvent סופקו כ absolute מעלות ביחס למסגרת הקואורדינטות של כדור הארץ. כדי להשתמש במעלות מוחלטות צריך להשתמש בחיישן מגנטומטר במכשיר כדי לזהות את השדה המגנטי של כדור הארץ, והחיישן הזה רגיש לתנודות בשדה המגנטי הקרוב שעלולות לפגוע בקריאות. בפועל, זה יכול לגרום לכך שבאפליקציית אינטרנט תתועד כמה DeviceOrientationEvent דפים בגלל מגנט בקרבת מקום, למרות שהמכשיר עצמו לא זז. באפליקציית מציאות מדומה שחשובה לה רק מעקב אחר שינויים בכיוון, הרעש המגנטי הזה הוא חדשות רעות.

מה ישתנה?

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

משאבים נוספים