Farklı aygıtlar arasındaki gerçek davranış tutarsız . Resize ve orientationChange olayları, değişen sıklıkta farklı bir sırada tetiklenebilir. Ayrıca, bazı değerler (örn. Screen.width ve window.orientation) beklediğinizde her zaman değişmez. Screen.width'den kaçının - iOS'ta döndürürken değişmez.
Güvenilir yaklaşım, hem yeniden boyutlandırma hem de yönlendirme dinlemektir Olayları değiştirin (bazıları güvenlik yakalama olarak yoklama ile) ve sonunda yönlendirme için geçerli bir değer elde edersiniz. Testlerimde, Android cihazlar bazen tam 180 derece döndürürken olayları tetikleyemedi, bu yüzden yönlendirmeyi yoklamak için bir setInterval ekledim.
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);
İşte test ettiğim dört cihazdan sonuçlar (ASCII tablosu için özür dilerim, ancak sonuçları sunmanın en kolay yolu gibi görünüyordu). İOS cihazlar arasındaki tutarlılığın yanı sıra, cihazlar arasında çok çeşitli var. NOT: Olaylar tetiklendikleri sırayla listelenir.
| ================================================= ============================= |
| Cihaz | Yapılan Etkinlikler | yönlendirme | innerWidth | screen.width |
| ================================================= ============================= |
| iPad 2 | yeniden boyutlandırma | 0 | 1024 | 768 |
| (manzaraya) | oryantasyon değişimi | 90 | 1024 | 768 |
| ---------------- + ------------------- + ------------ - + ------------ + -------------- |
| iPad 2 | yeniden boyutlandırma | 90 | 768 | 768 |
| (portreye) | oryantasyon değişimi | 0 | 768 | 768 |
| ---------------- + ------------------- + ------------ - + ------------ + -------------- |
| iPhone 4 | yeniden boyutlandırma | 0 | 480 | 320 |
| (manzaraya) | oryantasyon değişimi | 90 | 480 | 320 |
| ---------------- + ------------------- + ------------ - + ------------ + -------------- |
| iPhone 4 | yeniden boyutlandırma | 90 | 320 | 320 |
| (portreye) | oryantasyon değişimi | 0 | 320 | 320 |
| ---------------- + ------------------- + ------------ - + ------------ + -------------- |
| Droid telefon | oryantasyon değişimi | 90 | 320 | 320 |
| (manzaraya) | yeniden boyutlandırma | 90 | 569 | 569 |
| ---------------- + ------------------- + ------------ - + ------------ + -------------- |
| Droid telefon | oryantasyon değişimi | 0 | 569 | 569 |
| (portreye) | yeniden boyutlandırma | 0 | 320 | 320 |
| ---------------- + ------------------- + ------------ - + ------------ + -------------- |
| Samsung Galaxy | oryantasyon değişimi | 0 | 400 | 400 |
| Tablet | oryantasyon değişimi | 90 | 400 | 400 |
| (manzaraya) | oryantasyon değişimi | 90 | 400 | 400 |
| | yeniden boyutlandırma | 90 | 683 | 683 |
| | oryantasyon değişimi | 90 | 683 | 683 |
| ---------------- + ------------------- + ------------ - + ------------ + -------------- |
| Samsung Galaxy | oryantasyon değişimi | 90 | 683 | 683 |
| Tablet | oryantasyon değişimi | 0 | 683 | 683 |
| (portreye) | oryantasyon değişimi | 0 | 683 | 683 |
| | yeniden boyutlandırma | 0 | 400 | 400 |
| | oryantasyon değişimi | 0 | 400 | 400 |
| ---------------- + ------------------- + ------------ - + ------------ + -------------- |