Wie viele Beispiele befinden sich im Web, die die ganze Zeit im timeout-Funktionen die Devicebreite auf 320 oder 480 Pixel prüfen, um ein Kippen des Geräts zu erkennen und dann gegebenenfalls die Ansicht auf "profile" oder "landscape" anzupassen. Dabei feuern das iPhone und der iPod touch, oder besser gesagt der Safari 3, ein Event, welches die Rotation abfangen läßt. Beim Drehen wird zum body-Element das Event namens orientationchange gefeuert. Um nun die gewünschten Änderungen am Layout vorzunehmen, schreibt man sich eine Javascript-Funktion, die dies handle't und leitet das Event darauf:
<body onorientationchange="changeOrientation()">
window.addEventListener("orientationchange", function() { var intOrientation = window.orientation; var strOrientation = Math.abs(intOrientation) == 90 ? "landscape" : "profile"; document.body.setAttribute("orient", strOrientation); window.scrollTo(0, 1); }, false);
Darüber hinaus läßt sich natürlich auch die aktuelle Ausrichtung aus der Eigenschaft window.orientation auslesen, die folgende Zustände einnehmen kann:
| window.orientation | Orientation / Rotation |
|---|---|
| 0 | Portrait / Hochkant |
| 90 | Landscape / Horizontal, gegen den Uhrzeigersinn |
| -90 | Landscape / Horizontal, im Uhrzeigersinn gedreht |
| 180 | Portrait / Hochkant, überkopf (Button oben) |
Für alle, die immernoch nicht genug haben, hier die andere Variante
Ich habe eine Annomalie mit dem iPod touch gestestet, in dem diese Variante nicht immer funktioniert und der Safari schlicht weg seine Breitenänderungen nicht mehr mitteilt. Deswegen mag ich diese Variante nicht...
var updateLayout = function() { if (window.innerWidth != currentWidth) { currentWidth = window.innerWidth; var orient = (currentWidth == 320) ? "profile" : "landscape"; document.body.setAttribute("orient", orient); window.scrollTo(0, 1); } }; iPhone.DomLoad(updateLayout); setInterval(updateLayout, 500);