2010-04-29 4 views
33

Hat jemand dieses Verhalten bemerkt? Ich versuche ein Skript zu schreiben, das bei einer Größenänderung ausgelöst wird. Es funktioniert gut auf normalen Browsern, funktioniert gut auf dem iPhone, aber auf dem iPad, löst nur vom horizontalen zum vertikalen Ansichtsfenster, nicht umgekehrt.iPad löst nicht Resize Event von vertikal nach horizontal?

Hier ist der Code:

$(window).resize(function() { 

    var agent=navigator.userAgent.toLowerCase(); 
    var is_iphone = ((agent.indexOf('iphone') != -1)); 
    var is_ipad = ((agent.indexOf('ipad') != -1)); 

    if(is_iphone || is_ipad){ 
     location.reload(true); 
    } else {  
     /* Do stuff. */ 
    }; 
}); 
+1

hinzufügen Tag Webapp oder iphone-web? – Emil

Antwort

45

Wenn ich Sie richtig verstanden habe, möchten Sie etwas tun, wenn der Benutzer das iPad kippt. Hier gehen Sie:

window.onorientationchange = function(){ 

    var orientation = window.orientation; 

    // Look at the value of window.orientation: 

    if (orientation === 0){ 

     // iPad is in Portrait mode. 

    } 

    else if (orientation === 90){ 

     // iPad is in Landscape mode. The screen is turned to the left. 

    } 


    else if (orientation === -90){ 

     // iPad is in Landscape mode. The screen is turned to the right. 

    } 

} 

The left picture shows portrait mode, the right one landscape mode

+0

Ich wählte Ihre Antwort, weil es am prägnantesten die richtige Antwort war. Als ein Punkt der Notation jedoch schloss die Lösung, mit der ich ging, das "if" -Prüfen nicht mit ein. Es wurde einfach Code ausgeführt (nämlich ein Seiten-Reload), wenn die Ausrichtung geändert wurde. – dclowd9901

+1

@ dclowd9901 Ja, ich dachte schon, ich wollte nur ein paar zusätzliche Informationen geben :) – Vincent

+2

Sie haben vergessen, wenn 'Orientierung === 180'. Es ist, wenn das iPad auf den Kopf gestellt wird. – Mageek

1

The only thing I could find from apple:

Safari auf dem iPad und Safari auf dem iPhone haben nicht veränderbare Fenster. In Safari auf iPhone und iPad wird die Fenstergröße auf die Größe des Bildschirms eingestellt (abzüglich der Steuerelemente der Safari-Benutzeroberfläche) und kann vom Benutzer nicht geändert werden. Um sich auf einer Webseite zu bewegen, ändert der Benutzer die Zoomstufe und die Position des Ansichtsfensters, während er doppelt tippt oder klickt, um zu vergrößern oder zu verkleinern, oder indem er die Seite schwenkt und berührt, um sie zu schwenken. Wenn ein Benutzer die Zoomstufe und die Position des Ansichtsfensters innerhalb eines sichtbaren Inhaltsbereichs mit fester Größe (das heißt, das Fenster) ändert. Dies bedeutet, dass Webseitenelemente, deren Position im Ansichtsfenster fixiert ist, außerhalb des sichtbaren Inhaltsbereichs außerhalb des Bildschirms angezeigt werden.

Ich verstehe die "funktioniert auf dem iPhone" -Teil ... aber vielleicht ist es nicht mehr? Dies könnte eine Änderung in OS/mobile Safari seit dem letzten veröffentlichten iPhone OS-Release sein (die obige Dokumentation ist von März 2010).

Ich werde diese Frage erneut anfügen, indem ich das iPhone hinzufüge, vielleicht kann einer der Leute mit der Entwickler 4.0 OS-Version das testen? Wenn es der Fall ist, wurde es entfernt, dies sollte ein Fehler sein, der archiviert wird, bevor es live geht ... Ich bin mir nicht sicher, wie die Verfahren dazu bei Apple sind.

+0

Vielen Dank für das Nachschlagen und Hinzufügen des Tags. Um meine Verwirrung zu vermischen, bin ich kein Javascript-Zen-Master, also war ich mir nicht einmal sicher, ob ich den Code richtig zusammenstellte. – dclowd9901

+0

@ dclowd9901 - Der Code sieht gut aus, nur ein Extra ';' nach dem 'if' da :) Nur neugierig, warum musst du neu laden, wenn die Seite die Größe ändert? –

+0

Ich habe Funktionalität in einem Diashow-Plugin, das ich schrieb, das gibt es Vollbild-Anzeige mit einem Parameter. Die Benutzer haben mich darauf aufmerksam gemacht, dass die fehlende Anpassung der Fenstergröße ein Versehen war. Ich habe versucht, einen Bandaid zu schreiben, bevor ich eine neue getestete Version veröffentlicht habe, bin aber auf das Problem gestoßen, über das ich geschrieben habe. – dclowd9901

14

Ich denke, was Sie würden wollen die iPad Orientation CSS zu verwenden, die wie folgt aussieht:

<link rel="stylesheet" media="all and (orientation:portrait)" href="portrait.css" /> 
<link rel="stylesheet" media="all and (orientation:landscape)" href="landscape.css" /> 

Auch die orientationchange Ereignis ausgelöst wird, wenn die Ausrichtung geändert wird, nach iPad web development tips.

Zusammen sollte das Ihnen Werkzeuge genug geben, um mit der Änderung fertig zu werden.

+0

Ich kann das noch nicht testen, aber das ist wahrscheinlich genau das, wonach ich suche. Große allgemeine Ressource für allgemeine iPad-Entwicklung zu. Vielen Dank im Voraus artlung! Ich freue mich darauf, das auszuprobieren! – dclowd9901

+0

Cool! Ich hoffe, es ist hilfreich. Ich habe einen Freund, der gerade einen bekommen hat und begierig darauf ist, damit zu spielen. – artlung

+0

Dies scheint nicht zu funktionieren. Der Safari-Browser scheint die Eigenschaft 'orientationchange' nicht zu erkennen. – dclowd9901

0

Überprüfen Sie Ihre Version von iOS.

Die Veranstaltung "orientationChange" funktioniert nicht 3. * in iOS, aber es funktioniert in 4. *

0
  1. einen schönen Scheck tun, wenn Ihre Plattform iPad ist,
  2. das iOS-spezifischen Ereignis behandeln orientationChange durch den Fang window.onorientationchange

    if(navigator.platform == 'iPad') { 
        window.onorientationchange = function() { 
         // handle orientationchange event 
         // (here you can take advantage of the orientation property 
         //  - see the good answer above by Vincent) 
        }  
    } 
    
+2

Ich denke, es wäre besser, nach 'window.orientation' zu suchen und dann in den meisten Situationen explizit nach dem Gerät zu suchen. – alex

7

Dies beinhaltet alle Orientierungen.

sind hier zwei Möglichkeiten:

window.onorientationchange = function() { 

    var orientation = window.orientation; 

    // Look at the value of window.orientation: 

    if (orientation === 0) { 
    // iPad is in Portrait mode. 

    } else if (orientation === 90) { 
    // iPad is in Landscape mode. The screen is turned to the left. 

    } else if (orientation === -90) { 
    // iPad is in Landscape mode. The screen is turned to the right. 

    } else if (orientation === 180) { 
    // Upside down portrait. 

    } 
}  

oder

// Checks to see if the platform is strictly equal to iPad: 
    if(navigator.platform === 'iPad') { 
      window.onorientationchange = function() { 

      var orientation = window.orientation; 

      // Look at the value of window.orientation: 

      if (orientation === 0) { 
      // iPad is in Portrait mode. 

      } else if (orientation === 90) { 
      // iPad is in Landscape mode. The screen is turned to the left. 

      } else if (orientation === -90) { 
      // iPad is in Landscape mode. The screen is turned to the right. 

      } else if (orientation === 180) { 
      // Upside down portrait. 

      } 
      }  
     } 
Verwandte Themen