2011-03-31 4 views

Répondre

22

MISE À JOUR:

Vous pouvez consulter

jQuery mobile orientationchange

ou simple JS un:

window.addEventListener("orientationchange", function() { 
alert(window.orientation); 
}, false); 

Older réponse

http://www.nczonline.net/blog/2010/04/06/ipad-web-development-tips/

Safari sur l'iPad prend en charge la propriété window.orientation, si nécessaire, vous pouvez l'utiliser pour déterminer si l'utilisateur est en mode horizontal ou vertical. Pour rappel de cette fonctionnalité:

window.orientation is 0 when being held vertically 
window.orientation is 90 when rotated 90 degrees to the left (horizontal) 
window.orientation is -90 when rotated 90 degrees to the right (horizontal) 

Il y a aussi l'événement orientationChange qui se déclenche sur l'objet de la fenêtre lorsque l'appareil est mis en rotation.

Vous pouvez également utiliser des requêtes de médias CSS pour déterminer si l'iPad est maintenu en position verticale ou horizontale, tels que:

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

http://www.htmlgoodies.com/beyond/webmaster/toolbox/article.php/3889591/Detect-and-Set-the-iPhone--iPads-Viewport-Orientation-Using-JavaScript-CSS-and-Meta-Tags.htm

<script type="text/javascript"> 
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, 400); 
</script> 
+0

Il semble qu'à partir d'iOS 4.0, la version UIWebView ne supporte plus la propriété Javascript window.orientation, ou du moins je l'ai expérimenté. Ainsi, le seul moyen que j'ai trouvé pour notifier le Javascript interne d'UIWebView sur les changements d'orientation était d'appeler [webView stringByEvaluatingJavaScriptFromString: [NSString stringWithFormat: @ "didRotateTo ('% @')", orient]]; où webView est mon UIWebView et orient est une représentation sous forme de chaîne de l'orientation actuelle du périphérique. didRotateTo est une fonction javascript qui accepte un paramètre (l'orientation en tant que chaîne) –

+0

Wrt to polling, il y a un événement 'orientationchange' qui est déclenché lorsque l'orientation du périphérique change. – alex

0

window.orientation est ce que vous cherchez. il y a aussi un événement onOrientationChange fonctionne pour Android, iPhone et, je suis la plupart du temps que, pour l'ipad

0

Ajouter au @ mplungjan réponse, j'ai trouvé de meilleurs résultats en utilisant le webkit "natif" (je ne sais pas comment l'appeler) événement, 'deviceorientation' .

Dans le Mozilla Developer network ils ont une bonne explication sur la normalisation entre webkit et Gecko qui m'a aidé à résoudre ce problème.

5

Vous pouvez utiliser l'événement orientationChange comme ceci:

window.addEventListener('orientationchange', function(){ 
    /* update layout per new orientation */ 
}); 
+0

Cet événement a déjà été discuté. –

0

Vous pouvez utiliser mediaMatch pour évaluer les requêtes de médias CSS, par exemple

window 
    .matchMedia('(orientation: portrait)') 
    .addListener(function (m) { 
     if (m.matches) { 
      // portrait 
     } else { 
      // landscape 
     } 
    }); 

incendies de requête média CSS avant le orientationchange. Si vous souhaitez capturer la fin de l'événement (lorsque la rotation est terminée), voir mobile viewport height after orientation change.

0

Un extrait facile à utiliser:

function doOnOrientationChange() 
{ 
    switch(window.orientation) 
    { 
     case -90: 
     case 90: 
      // alert('landscape'); 
      $('#portrait').css({display:'none'}); 
      $('#landscape').css({display:'block'}); 

      break; 
     default: 
      // alert('portrait'); 
      $('#portrait').css({display:'block'}); 
      $('#landscape').css({display:'none'}); 
      break; 
    } 
} 

window.addEventListener('orientationchange', doOnOrientationChange); 

// First launch 
doOnOrientationChange(); 
0

De "Cross-device, cross-browser portrait-landscape detection"

Il s'agit de découvrir si un appareil mobile est en mode portrait ou paysage; Vous n'avez pas besoin de vous préoccuper de son orientation. Pour autant que vous sachiez, si vous tenez votre iPad à l'envers, c'est en mode portrait.

$(window).bind("resize", function(){ 
    screenOrientation = ($(window).width() > $(window).height())? 90 : 0; 
}); 

90 signifie paysage, 0 signifie portrait, navigateur croisé, appareil croisé. L'événement window.onresize est disponible partout, et il est toujours allumé au bon moment; jamais trop tôt, jamais trop tard. En fait, la taille de l'écran est toujours aussi précise.

+0

Que diriez-vous de la situation où l'utilisateur tient son téléphone dans une orientation portrait, puis ouvre un clavier virtuel qui fait que la largeur devient plus grande que la hauteur sur les petits écrans? L'utilisateur tient toujours le téléphone dans la même orientation portrait, mais votre approche peut donner un faux résultat positif du changement d'orientation. –

Questions connexes