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

นักพัฒนาแอปที่ทํางานกับเว็บแอปเสมือนจริงหรือเทคโนโลยีความจริงเสริม (AR) ย่อมคุ้นเคยกับ DeviceOrientationEvent อย่างแน่นอน สําหรับผู้ที่เพิ่งเริ่มต้นใช้งาน หัวข้อ "This End Up: Using Device Orientation" จะแสดงภาพรวมที่ยอดเยี่ยมเกี่ยวกับวิธีที่ deviceorientation Listener เหตุการณ์ตอบสนองต่อการหมุนอุปกรณ์

ใน 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 และวิธีใช้การผสานเซ็นเซอร์ที่ออกแบบมาโดยเฉพาะโดยใช้ DeviceMotionEvent ซึ่งจะให้สิทธิ์เข้าถึงระดับต่ำแก่เครื่องวัดความเร่งและไจโรสโคป และอาจทำให้ผู้ใช้ได้รับประสบการณ์เสมือนจริงที่แม่นยำยิ่งขึ้น

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