2012-01-24 4 views
2
document.addEventListener("orientationChanged", updateOrientation); 

J'essaye d'appeler une fonction sur updateOrientation, mais la fonction n'est tout simplement pas appelée. J'utilise le code javascript pour le même.Orientation changer dans Android en utilisant javascript

Quelqu'un peut-il m'aider avec orientationChange en utilisant le code javascript.

Merci d'avance.

+2

Si le nom de l'événement est 'orientationChange', pourquoi avez-vous' orientationChanged' dans votre code? – lonesomeday

+1

En réalité, toutes les lettres dans le nom de l'événement doivent être minuscules – Dan

+0

@Dan ce n'est pas vrai: camelCase est toujours autorisé à avoir un code plus lisible par les humains –

Répondre

1

Il est pas si facile: je jouais autour de lui beaucoup trop :)

D'abord, vous avez sans doute remarqué que certains appareils Android (par exemple Samsung Galaxy Tab) sera détecté comme portrait alors qu'ils sont le paysage et vice-versa. Donc d'abord vous devez construire des fonctions pour détecter l'orientation basée sur screen.width et screen.height si ipad n'est pas détecté (l'ipad montrera toujours l'orientation correctement .. Je ne suis pas amusant de toute façon).

Ensuite, vous devez déclencher la fonction de rappel après un certain temps que le changement d'orientation est détecté avec un délai d'attente pour laisser l'environnement entier changer en conséquence à la nouvelle orientation.

Voici donc comment je fais .. heureux de le partager :)

function orientation_changed() 
{ 
    if (is_portrait()) 
    { 
     //do something 
    } 
    else if (is_landscape()) 
    { 
     // do something else 
    } 
    clearTimeout(window.t); 
    delete window.t; 
} 

window.t = undefined; 
window.onorientationchange = function (event) 
{ 
    window.t = setTimeout('orientation_changed();', 250); 
} 

function is_landscape() 
{ 
    var uagent = navigator.userAgent.toLowerCase(); 
    if (uagent.search('ipad') > -1) 
    { 
     var r = (window.orientation == 90 || window.orientation == -90); 
    } 
    else 
    { 
     var r = (screen.width > screen.height); 
    } 
    return r; 
} 

function is_portrait() 
{ 
    var uagent = navigator.userAgent.toLowerCase(); 
    if (uagent.search('ipad') > -1) 
    { 
     var r = (window.orientation == 0 || window.orientation == 180); 
    } 
    else 
    { 
     var r = (screen.width < screen.height); 
    } 
    return r; 
} 
+0

Je tourne sous Android 2.2 sur T-Mobile Galaxy S et la détection paysage/portrait est permutée . – Zorayr

+0

@Zorayr oui sur Galaxy ils sont commutés. Le script ci-dessus devrait le réparer (je l'ai testé sur un onglet Galaxy S), si vous voulez dire qu'ils sont encore commutés en utilisant le script ci-dessus, essayez d'utiliser un délai plus long en changeant 250 dans un plus grand nombre. Espérons que ça aide –

+0

Si vous utilisez l'événement onresive, vous n'attendrez pas 250 milisecondes – Dan

0

Pour tester le support natif "orientationChange", utilisez "orientationchange" in window

comme solution de repli, utilisez onresize événement et vérifier window.outerHeight > window.outerWidth

+0

L'OP connaît déjà ces événements: il a demandé un extrait de travail. –