Est-il possible de détecter le changement d'orientation du navigateur sur l'iPad ou le Galaxy Tab en utilisant javascript? Je pense qu'il est possible d'utiliser des requêtes de médias CSS.
UPDATE:
Vous voudrez peut-être vérifier
jQuery mobile orientationchange
ou la plaine JS one:
window.addEventListener("orientationchange", function() {
alert(window.orientation);
}, false);
window.addEventListener("orientationchange", function() {
alert("the orientation of the device is now " + screen.orientation.angle);
});
Réponse plus ancienne
http://www.nczonline.net/blog/2010/04/06/ipad-web-development-tips/
Safari sur iPad prend en charge la propriété window.orientation. Vous pouvez donc, si nécessaire, 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 existe également l'événement orientationchange qui se déclenche sur l'objet window lorsque le périphérique est pivoté.
Vous pouvez également utiliser les requêtes de média CSS pour déterminer si l'iPad est maintenu verticalement ou horizontalement, par exemple:
<link rel="stylesheet" media="all and (orientation:portrait)" href="portrait.css">
<link rel="stylesheet" media="all and (orientation:landscape)" href="landscape.css">
<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>
Vous pouvez utiliser l'événement orientationchange comme suit:
window.addEventListener('orientationchange', function(){
/* update layout per new orientation */
});
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();
De " Détection de paysages portrait horizontaux, multi-appareils et multi-navigateurs "
Il s’agit de savoir si un appareil mobile est en mode portrait ou paysage; vous n'avez pas besoin de vous soucier de son orientation. Pour tout ce que vous savez, si vous tenez votre iPad à l'envers, il 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 déclenché au bon moment. jamais trop tôt, jamais trop tard. En fait, la taille de l'écran est toujours exacte.
La version JavaScript serait la suivante, corrigez-moi s'il vous plaît si je me trompe.
function getScreenOrientation() {
screenOrientation = window.outerWidth > window.outerHeight ? 90 : 0;
console.log("screenOrientation = " + screenOrientation);
}
window.addEventListener("resize", function(event) {
getScreenOrientation();
});
getScreenOrientation();
En ajoutant à la réponse @mplungjan, j’ai trouvé de meilleurs résultats en utilisant l’événement "natif" du Webkit (je ne sais pas comment on l’appelle appelé), ' deviceorientation '.
Dans le réseau de développeurs Mozilla ils ont une bonne explication sur la façon de normaliser Webkit et Gecko, ce qui m’a aidé à résoudre ce problème.
window.orientation est ce que vous recherchez. il y a aussi un événement onOrientationChange fonctionne pour Android, iphone et, j'en suis presque sûr, pour ipad
Vous pouvez utiliser mediaMatch pour évaluer les requêtes de média CSS, par exemple.
window
.matchMedia('(orientation: portrait)')
.addListener(function (m) {
if (m.matches) {
// portrait
} else {
// landscape
}
});
La requête multimédia CSS est déclenchée avant la orientationchange
. Si vous souhaitez capturer la fin de l'événement (une fois la rotation terminée), voir hauteur de la fenêtre d'affichage mobile après le changement d'orientation .