Comment utiliser javascript conditionnellement comme les requêtes média CSS3, l'orientation?
Par exemple, je peux écrire css pour spécifique
@media only screen and (width : 1024px) and (orientation : landscape) {
.selector1 { width:960px}
}
Maintenant, je veux exécuter du javascript uniquement s'il correspond aux mêmes 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 ne devrait être exécuté que sur une taille et une orientation d'écran spécifiques
Vous pouvez utiliser window.matchMedia () :
Testez une requête multimédia sur un appareil mobile
if (matchMedia('only screen and (max-width: 480px)').matches) {
// smartphone/iphone... maybe run some small-screen related dom scripting?
}
Tester l'orientation paysage
if (matchMedia('all and (orientation:landscape)').matches) {
// probably tablet in widescreen view
}
Actuellement pris en charge dans tous les navigateurs modernes ( plus de détails )
Polyfill pour les anciens navigateurs: https://github.com/paulirish/matchMedia.js/
... Je veux exécuter un javascript uniquement si la largeur maximale du navigateur est de 1900 px et la largeur minimale est de 768
EDIT: En fait, tout était 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;
}
Je peux penser à une solution rapide: appliquer certains styles conditionnellement à un div invisible, et vérifier s'ils sont appliqués 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();
Il vaut probablement la peine de mentionner qu'il y a l'événement d'orientationchange auquel vous voudrez peut-être vous connecter comme ceci:
$('body').bind('orientationchange', function(){
// check orientation, update styles accordingly
});
Je sais que pour que cet événement soit déclenché par Safari mobile, vous devrez vérifier les autres navigateurs.
Vous pouvez simplement réécrire la requête multimédia en tant qu'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);