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