พบกับการเปลี่ยนแปลงการวางแนวของอุปกรณ์ใน Chrome 50

เจฟฟ์ พอสนิก
เจฟฟ์ พอสนิก

นักพัฒนาซอฟต์แวร์ที่ใช้งานเว็บแอป 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 ที่แม่นยำยิ่งขึ้นสำหรับผู้ใช้

แหล่งข้อมูลเพิ่มเติม