Фактична поведінка на різних пристроях невідповідна . Події зміни розміру та орієнтаціїChange можуть запускатись в різній послідовності з різною частотою. Також деякі значення (наприклад, ширина екрана та орієнтація вікон) не завжди змінюються, коли ви очікуєте. Уникайте ширини екрана - вона не змінюється при обертанні в iOS.
Надійний підхід полягає в прослуховуванні подій як розміру, так і орієнтації ( ChangeChange) (з деякими опитуваннями як захоплення безпеки), і ви з часом отримаєте дійсне значення для орієнтації. У моєму тестуванні Android-пристрої час від часу не спрацьовують при повороті на 180 градусів, тому я також включив setInterval для опитування орієнтації.
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, на різних пристроях існує велика різноманітність. ПРИМІТКА. Події перераховані в порядку, в якому вони розпочалися.
| ==================================================== ============================== |
| Пристрій | Розпочаті події | орієнтація | внутрішня ширина | ширина екрана |
| ==================================================== ============================== |
| 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 |
| ---------------- + ------------------- + ------------ - + ------------ + -------------- |