Perilaku aktual di berbagai perangkat berbeda tidak konsisten . Acara pengubahan ukuran dan orientasi dapat menyala dalam urutan yang berbeda dengan frekuensi yang bervariasi. Juga, beberapa nilai (mis., Screen.width dan window.orientation) tidak selalu berubah ketika Anda mengharapkannya. Hindari screen.width - tidak berubah saat diputar di iOS.
Pendekatan yang andal adalah mendengarkan acara perubahan ukuran dan orientasi (dengan beberapa polling sebagai tangkapan keselamatan), dan Anda akhirnya akan mendapatkan nilai yang valid untuk orientasi. Dalam pengujian saya, perangkat Android kadang-kadang gagal memecat acara ketika memutar 180 derajat penuh, jadi saya juga menyertakan setInterval untuk polling orientasi.
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);
Berikut adalah hasil dari empat perangkat yang telah saya uji (maaf untuk tabel ASCII, tetapi sepertinya cara termudah untuk menyajikan hasilnya). Selain dari konsistensi antara perangkat iOS, ada banyak variasi antar perangkat. CATATAN: Peristiwa terdaftar dalam urutan yang dipecat.
| ================================================= ============================= |
| Perangkat | Acara Dipecat | orientasi | innerWidth | screen.width |
| ================================================= ============================= |
| iPad 2 | mengubah ukuran | 0 | 1024 | 768 |
| (ke lansekap) | perubahan orientasi | 90 | 1024 | 768 |
| ---------------- + ------------------- + ------------ - + ------------ + -------------- |
| iPad 2 | mengubah ukuran | 90 | 768 | 768 |
| (untuk potret) | perubahan orientasi | 0 | 768 | 768 |
| ---------------- + ------------------- + ------------ - + ------------ + -------------- |
| iPhone 4 | mengubah ukuran | 0 | 480 | 320 |
| (ke lansekap) | perubahan orientasi | 90 | 480 | 320 |
| ---------------- + ------------------- + ------------ - + ------------ + -------------- |
| iPhone 4 | mengubah ukuran | 90 | 320 | 320 |
| (untuk potret) | perubahan orientasi | 0 | 320 | 320 |
| ---------------- + ------------------- + ------------ - + ------------ + -------------- |
| Telepon Droid | perubahan orientasi | 90 | 320 | 320 |
| (ke lansekap) | mengubah ukuran | 90 | 569 | 569 |
| ---------------- + ------------------- + ------------ - + ------------ + -------------- |
| Telepon Droid | perubahan orientasi | 0 | 569 | 569 |
| (untuk potret) | mengubah ukuran | 0 | 320 | 320 |
| ---------------- + ------------------- + ------------ - + ------------ + -------------- |
| Samsung Galaxy | perubahan orientasi | 0 | 400 | 400 |
| Tablet | perubahan orientasi | 90 | 400 | 400 |
| (ke lansekap) | perubahan orientasi | 90 | 400 | 400 |
| | mengubah ukuran | 90 | 683 | 683 |
| | perubahan orientasi | 90 | 683 | 683 |
| ---------------- + ------------------- + ------------ - + ------------ + -------------- |
| Samsung Galaxy | perubahan orientasi | 90 | 683 | 683 |
| Tablet | perubahan orientasi | 0 | 683 | 683 |
| (untuk potret) | perubahan orientasi | 0 | 683 | 683 |
| | mengubah ukuran | 0 | 400 | 400 |
| | perubahan orientasi | 0 | 400 | 400 |
| ---------------- + ------------------- + ------------ - + ------------ + -------------- |