ที่เกิดขึ้นจริงพฤติกรรมที่แตกต่างกันในอุปกรณ์จะไม่สอดคล้องกัน เหตุการณ์การปรับขนาดและการวางแนวสามารถดำเนินการในลำดับที่แตกต่างกันด้วยความถี่ที่แตกต่างกัน นอกจากนี้ค่าบางอย่าง (เช่น screen.width และ window.orientation) จะไม่เปลี่ยนแปลงเมื่อคุณคาดหวัง หลีกเลี่ยงหน้าจอแบนด์วิดท์ - มันจะไม่เปลี่ยนเมื่อหมุนใน iOS
วิธีการที่เชื่อถือได้คือการฟังทั้งการปรับขนาดและการวางแนวเหตุการณ์การเปลี่ยนแปลง (ด้วยการสำรวจความคิดเห็นเพื่อความปลอดภัย) และในที่สุดคุณจะได้รับค่าที่ถูกต้องสำหรับการปฐมนิเทศ ในการทดสอบของฉันอุปกรณ์ Android บางครั้งล้มเหลวในการเริ่มต้นเหตุการณ์เมื่อหมุนเต็ม 180 องศาดังนั้นฉันจึงได้รวมชุดช่วงเวลาเพื่อสำรวจความคิดเห็น
var previousOrientation = window.orientation;
var checkOrientation = function(){
if(window.orientation !== previousOrientation){
previousOrientation = window.orientation;
// orientation changed, do your magic here
}
};
window.addEventListener("resize", checkOrientation, false);
window.addEventListener("orientationchange", checkOrientation, false);
// (optional) Android doesn't always fire orientationChange on 180 degree turns
setInterval(checkOrientation, 2000);
นี่คือผลลัพธ์จากอุปกรณ์สี่อย่างที่ฉันทดสอบ (ขออภัยสำหรับตาราง ASCII แต่ดูเหมือนจะเป็นวิธีที่ง่ายที่สุดในการนำเสนอผลลัพธ์) นอกเหนือจากความสอดคล้องระหว่างอุปกรณ์ iOS แล้วยังมีอุปกรณ์ที่หลากหลายมากมาย หมายเหตุ: เหตุการณ์ต่าง ๆ ที่ระบุไว้ในลำดับที่พวกเขายิง
| ================================================= ============================= |
| อุปกรณ์ | เหตุการณ์ที่เกิดขึ้น ปฐมนิเทศ | InnerWidth ความกว้างของหน้าจอ
| ================================================= ============================= |
| iPad 2 | ปรับขนาด | 0 | 1024 | 768 |
| (กับทิวทัศน์) ปฐมนิเทศ | 90 | 1024 | 768 |
| ---------------- + + ------------------- ------------ - + + ------------ -------------- |
| iPad 2 | ปรับขนาด | 90 | 768 | 768 |
| (เป็นแนวตั้ง) ปฐมนิเทศ | 0 | 768 | 768 |
| ---------------- + + ------------------- ------------ - + + ------------ -------------- |
| iPhone 4 | ปรับขนาด | 0 | 480 | 320 |
| (กับทิวทัศน์) ปฐมนิเทศ | 90 | 480 | 320 |
| ---------------- + + ------------------- ------------ - + + ------------ -------------- |
| iPhone 4 | ปรับขนาด | 90 | 320 | 320 |
| (เป็นแนวตั้ง) ปฐมนิเทศ | 0 | 320 | 320 |
| ---------------- + + ------------------- ------------ - + + ------------ -------------- |
| โทรศัพท์ Droid ปฐมนิเทศ | 90 | 320 | 320 |
| (กับทิวทัศน์) ปรับขนาด | 90 | 569 | 569 |
| ---------------- + + ------------------- ------------ - + + ------------ -------------- |
| โทรศัพท์ Droid ปฐมนิเทศ | 0 | 569 | 569 |
| (เป็นแนวตั้ง) ปรับขนาด | 0 | 320 | 320 |
| ---------------- + + ------------------- ------------ - + + ------------ -------------- |
| Samsung Galaxy | ปฐมนิเทศ | 0 | 400 | 400 |
| แท็บเล็ต ปฐมนิเทศ | 90 | 400 | 400 |
| (กับทิวทัศน์) ปฐมนิเทศ | 90 | 400 | 400 |
| | ปรับขนาด | 90 | 683 | 683 |
| | ปฐมนิเทศ | 90 | 683 | 683 |
| ---------------- + + ------------------- ------------ - + + ------------ -------------- |
| Samsung Galaxy | ปฐมนิเทศ | 90 | 683 | 683 |
| แท็บเล็ต ปฐมนิเทศ | 0 | 683 | 683 |
| (เป็นแนวตั้ง) ปฐมนิเทศ | 0 | 683 | 683 |
| | ปรับขนาด | 0 | 400 | 400 |
| | ปฐมนิเทศ | 0 | 400 | 400 |
| ---------------- + + ------------------- ------------ - + + ------------ -------------- |