Hành vi thực tế trên các thiết bị khác nhau là không nhất quán . Các sự kiện thay đổi kích thước và định hướng có thể kích hoạt theo một chuỗi khác nhau với tần suất khác nhau. Ngoài ra, một số giá trị (ví dụ: screen. Thong và window.orientation) không luôn thay đổi khi bạn mong đợi. Tránh màn hình. Băng thông - nó không thay đổi khi xoay trong iOS.
Cách tiếp cận đáng tin cậy là lắng nghe cả hai sự kiện thay đổi kích thước và định hướng Thay đổi (với một số bỏ phiếu là một biện pháp an toàn) và cuối cùng bạn sẽ nhận được giá trị hợp lệ cho hướng. Trong thử nghiệm của tôi, các thiết bị Android đôi khi không thể kích hoạt các sự kiện khi xoay 180 độ đầy đủ, do đó tôi cũng đã bao gồm một giá trị xác định để thăm dò hướng.
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);
Dưới đây là kết quả từ bốn thiết bị mà tôi đã thử nghiệm (xin lỗi cho bảng ASCII, nhưng có vẻ như là cách dễ nhất để trình bày kết quả). Bên cạnh sự thống nhất giữa các thiết bị iOS, có rất nhiều sự đa dạng trên các thiết bị. LƯU Ý: Các sự kiện được liệt kê theo thứ tự mà chúng bắn.
| ================================================= ============================= |
| Thiết bị | Sự kiện bắn | định hướng | trongWidth | màn hình. Băng thông |
| ================================================= ============================= |
| iPad 2 | thay đổi kích thước | 0 | 1024 | 768 |
| (đến phong cảnh) | định hướng | 90 | 1024 | 768 |
| ---------------- + ------------------- + ------------ - + ------------ + -------------- |
| iPad 2 | thay đổi kích thước | 90 | 768 | 768 |
| (để chân dung) | định hướng | 0 | 768 | 768 |
| ---------------- + ------------------- + ------------ - + ------------ + -------------- |
| iPhone 4 | thay đổi kích thước | 0 | 480 | 320 |
| (đến phong cảnh) | định hướng | 90 | 480 | 320 |
| ---------------- + ------------------- + ------------ - + ------------ + -------------- |
| iPhone 4 | thay đổi kích thước | 90 | 320 | 320 |
| (để chân dung) | định hướng | 0 | 320 | 320 |
| ---------------- + ------------------- + ------------ - + ------------ + -------------- |
| Điện thoại Droid | định hướng | 90 | 320 | 320 |
| (đến phong cảnh) | thay đổi kích thước | 90 | 569 | 569 |
| ---------------- + ------------------- + ------------ - + ------------ + -------------- |
| Điện thoại Droid | định hướng | 0 | 569 | 569 |
| (để chân dung) | thay đổi kích thước | 0 | 320 | 320 |
| ---------------- + ------------------- + ------------ - + ------------ + -------------- |
| Thiên hà Samsung | định hướng | 0 | 400 | 400 |
| Máy tính bảng | định hướng | 90 | 400 | 400 |
| (đến phong cảnh) | định hướng | 90 | 400 | 400 |
| | thay đổi kích thước | 90 | 683 | 683 |
| | định hướng | 90 | 683 | 683 |
| ---------------- + ------------------- + ------------ - + ------------ + -------------- |
| Thiên hà Samsung | định hướng | 90 | 683 | 683 |
| Máy tính bảng | định hướng | 0 | 683 | 683 |
| (để chân dung) | định hướng | 0 | 683 | 683 |
| | thay đổi kích thước | 0 | 400 | 400 |
| | định hướng | 0 | 400 | 400 |
| ---------------- + ------------------- + ------------ - + ------------ + -------------- |