นักพัฒนาซอฟต์แวร์ที่ใช้งานเว็บแอป Virtual Reality หรือ Augmented Reality จะคุ้นเคยกับ DeviceOrientationEvent
อยู่แล้วอย่างแน่นอน
สำหรับผู้เริ่มต้น “This End Up: using Device Orientation” ให้ภาพรวมที่ยอดเยี่ยมเกี่ยวกับวิธีที่ Listener เหตุการณ์ deviceorientation
ตอบสนองต่อการบิดและหมุนอุปกรณ์
ใน Chrome เวอร์ชันก่อนหน้า ค่า alpha
,
beta
และ gamma
ที่รวมอยู่ใน DeviceOrientationEvent
จะมีค่าเป็น
absolute
องศาตามกรอบพิกัดของโลก การระบุองศาสัมบูรณ์ต้องใช้เซ็นเซอร์เครื่องวัดค่าความเข้มข้นของสนามแม่เหล็กของอุปกรณ์ในการตรวจจับสนามแม่เหล็กของโลก ซึ่งก็มีแนวโน้มที่จะเกิดความแปรปรวนของสนามแม่เหล็กในบริเวณใกล้เคียงซึ่งอาจทำให้ค่าดังกล่าวออกได้ ซึ่งในทางปฏิบัติแล้ว ปัญหานี้อาจทำให้เว็บแอปลงทะเบียน DeviceOrientationEvent
จำนวนมาก เนื่องจากมีแม่เหล็กอยู่ใกล้ๆ แม้ว่าตัวอุปกรณ์เองจะไม่เคลื่อนไหวก็ตาม สำหรับแอปพลิเคชัน Virtual Reality ที่ให้ความสำคัญกับการติดตาม
การเปลี่ยนแปลงการวางแนวเท่านั้น เสียงแม่เหล็กนี้เป็นข่าวร้าย
สิ่งที่จะเปลี่ยนแปลงไป
ตั้งแต่ Chrome 50 เป็นต้นไป องศาที่รวมอยู่ใน DeviceOrientationEvent
จะไม่ใช่ค่าสัมบูรณ์ที่เกี่ยวข้องกับเฟรมพิกัดของโลกอีกต่อไป ซึ่งหมายความว่า DeviceOrientationEvent
ควรทริกเกอร์เฉพาะเมื่อมีการเคลื่อนไหวจริงเท่านั้น ตามที่ตรวจพบด้วยตัวตรวจวัดความเร่งและเครื่องวัดการหมุนของอุปกรณ์ เครื่องวัดค่าความเข้มข้นของสนามแม่เหล็กและค่าที่ผิดพลาดที่เกิดจากการผันผวนของสนามแม่เหล็กจะอยู่นอกภาพ
แต่ฉันยังต้องการระดับสัมบูรณ์อยู่
ถ้าคุณเขียน JavaScript ที่ต้องใช้ระดับสัมบูรณ์ หรืออาจเป็นส่วนหนึ่งของเว็บแอปพลิเคชัน Augmented Reality ที่ต้องแมปกับโลกจริงโดยตรง คุณก็ไม่ขาดตอน ลักษณะการทำงานก่อนหน้านี้ซึ่งขึ้นอยู่กับเครื่องวัดค่าความเข้มข้นของสนามแม่เหล็กของอุปกรณ์จะพร้อมใช้งานผ่านเหตุการณ์ 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
เนื่องจากจะให้การเข้าถึงตัวตรวจวัดความเร่งและเครื่องวัดการหมุนในระดับต่ำ และอาจนำไปสู่ประสบการณ์ Virtual Reality ที่แม่นยำยิ่งขึ้นสำหรับผู้ใช้