Das tatsächliche Verhalten zwischen verschiedenen Geräten ist inkonsistent . Die Ereignisse "Größe ändern" und "Ausrichtung ändern" können in einer anderen Reihenfolge mit unterschiedlicher Häufigkeit ausgelöst werden. Außerdem ändern sich einige Werte (z. B. screen.width und window.orientation) nicht immer, wenn Sie dies erwarten. Vermeiden Sie screen.width - es ändert sich nicht, wenn Sie in iOS drehen.
Der zuverlässige Ansatz besteht darin, sowohl Größenänderungs- als auch Orientierungsänderungsereignisse abzuhören (mit einigen Abfragen als Sicherheitsmaßnahme), und Sie erhalten schließlich einen gültigen Wert für die Ausrichtung. Bei meinen Tests können Android-Geräte gelegentlich keine Ereignisse auslösen, wenn sie um volle 180 Grad gedreht werden. Daher habe ich auch ein setInterval eingefügt, um die Ausrichtung abzufragen.
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);
Hier sind die Ergebnisse der vier Geräte, die ich getestet habe (Entschuldigung für die ASCII-Tabelle, aber es schien der einfachste Weg zu sein, die Ergebnisse zu präsentieren). Abgesehen von der Konsistenz zwischen den iOS-Geräten gibt es eine große Vielfalt zwischen den Geräten. HINWEIS: Die Ereignisse werden in der Reihenfolge aufgelistet, in der sie ausgelöst wurden.
| ================================================ ============================= |
| Gerät | Ereignisse ausgelöst | Orientierung | innerWidth | screen.width |
| ================================================ ============================= |
| iPad 2 | Größe ändern | 0 | 1024 | 768 |
| (zur Landschaft) | Orientierungswechsel | 90 | 1024 | 768 |
| ---------------- + ------------------- + ------------ - + ------------ + -------------- |
| iPad 2 | Größe ändern | 90 | 768 | 768 |
| (zum Porträt) | Orientierungswechsel | 0 | 768 | 768 |
| ---------------- + ------------------- + ------------ - + ------------ + -------------- |
| iPhone 4 | Größe ändern | 0 | 480 | 320 |
| (zur Landschaft) | Orientierungswechsel | 90 | 480 | 320 |
| ---------------- + ------------------- + ------------ - + ------------ + -------------- |
| iPhone 4 | Größe ändern | 90 | 320 | 320 |
| (zum Porträt) | Orientierungswechsel | 0 | 320 | 320 |
| ---------------- + ------------------- + ------------ - + ------------ + -------------- |
| Droid Telefon | Orientierungswechsel | 90 | 320 | 320 |
| (zur Landschaft) | Größe ändern | 90 | 569 | 569 |
| ---------------- + ------------------- + ------------ - + ------------ + -------------- |
| Droid Telefon | Orientierungswechsel | 0 | 569 | 569 |
| (zum Porträt) | Größe ändern | 0 | 320 | 320 |
| ---------------- + ------------------- + ------------ - + ------------ + -------------- |
| Samsung Galaxy | Orientierungswechsel | 0 | 400 | 400 |
| Tablette | Orientierungswechsel | 90 | 400 | 400 |
| (zur Landschaft) | Orientierungswechsel | 90 | 400 | 400 |
| | Größe ändern | 90 | 683 | 683 |
| | Orientierungswechsel | 90 | 683 | 683 |
| ---------------- + ------------------- + ------------ - + ------------ + -------------- |
| Samsung Galaxy | Orientierungswechsel | 90 | 683 | 683 |
| Tablette | Orientierungswechsel | 0 | 683 | 683 |
| (zum Porträt) | Orientierungswechsel | 0 | 683 | 683 |
| | Größe ändern | 0 | 400 | 400 |
| | Orientierungswechsel | 0 | 400 | 400 |
| ---------------- + ------------------- + ------------ - + ------------ + -------------- |