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