48 votes

Comment utiliser javascript conditionnellement comme CSS3 media queries, de l'orientation?

Comment utiliser javascript conditionnellement comme CSS3 media queries, de l'orientation?

Par Exemple je peux écrire des règles css spécifiques

@media only screen and (width : 1024px) and (orientation : landscape) {

.selector1 { width:960px}

}

Maintenant, je veux seulement exécuter du javascript si elle correspond aux même conditions

comme

@media only screen and (width : 1024px) and (orientation : landscape) {

A javascript code here

}

J'ai un javascript externe par exemple http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.6.4.min.js et il convient de s'exécuter uniquement sur écran spécifique de la taille et de l'orientation

66voto

Emil Stenström Points 3551

Voici une bien meilleure façon de faire de même avec le javascript:

https://github.com/paulirish/matchMedia.js/

Test d'un appareil mobile media query

if (matchMedia('only screen and (max-width: 480px)').matches) {
  // smartphone/iphone... maybe run some small-screen related dom scripting?
}

Test orientation paysage

if (matchMedia('all and (orientation:landscape)').matches) {
  // probably tablet in widescreen view
}

12voto

mowwwalker Points 5977

...Je veux lancer un script javascript que si max-largeur du navigateur est 1900px et min-width est 768

EDIT: en Fait, c'était tout faux. Si vous utilisez un appareil mobile, utilisez:

function doStuff(){
    landscape = window.orientation? window.orientation=='landscape' : true;

    if(landscape && window.innerWidth<1900 && window.innerWidth > 768){
        //code here
    }
}
window.onload=window.onresize=doStuff;
if(window.onorientationchange){
    window.onorientationchange=doStuff;
}

11voto

Eric Points 36290

Je pense à une solution rapide: Appliquer un peu de styles conditionnellement à un invisible div, et vérifier si elles sont appliquées avec javascript:

div#test { display: none }
@media only screen and (width : 1024px) and (orientation : landscape) {
    div#test { background-color: white; }
}
if(document.getElementById('test').style.backgroundColor == 'white')
    mediaSelectorIsActive();

0voto

vzwick Points 4324

C'est probablement la peine de mentionner qu'il est l'événement orientationchange que vous souhaitez raccorder comme suit:

$('body').bind('orientationchange', function(){
    // check orientation, update styles accordingly
});

Je sais que le sujet de cet événement déclenché par le navigateur Safari mobile, vous devez vérifier sur les autres navigateurs.

0voto

Emil Stenström Points 3551

Vous pouvez simplement réécrire la requête de média comme une expression javascript à la place:

function sizehandler(evt) {
    ...
}

function orientationhandler(evt){  

  // For FF3.6+  
  if (!evt.gamma && !evt.beta) {  
    evt.gamma = -(evt.x * (180 / Math.PI));  
    evt.beta = -(evt.y * (180 / Math.PI));  
  }  

  // use evt.gamma, evt.beta, and evt.alpha   
  // according to dev.w3.org/geo/api/spec-source-orientation  

  ...
}  

window.addEventListener('deviceorientation', orientationhandler, false);
window.addEventListener('MozOrientation', orientationhandler, false);
window.addEventListener('load', orientationhandler, false); 
window.addEventListener('resize', sizehandler, false); 
window.addEventListener('load', sizehandler, false); 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X