7
votes

javascript window window.onorientationchange se déclenche continuellement

J'essaie de détecter des modifications d'orientation sur les appareils mobiles et de déclencher une fonction une fois une orientation terminée, mais le code à l'intérieur de la fonction est en train de tirer en permanence dans Android et je ne sais pas pourquoi. Voici mon code:

var supportsOrientationChange = "onorientationchange" in window;
var orientationEvent = supportsOrientationChange ? "orientationchange" : "resize";

window.addEventListener(orientationEvent, 
   function() { alert ('orientation changed'); }, 
   false
);


0 commentaires

3 Réponses :


8
votes

J'ai utilisé un travail autour de cela dans mon application. J'ai ajouté un auditeur d'événement pour l'ordre d'orientation, puis définissez un délai d'attente afin que l'ordre d'orientation puisse se produire et je pourrais obtenir une nouvelle valeur de largeur qui reflétait la largeur après le changement d'orientation.

var device_width = 0;
$(document).ready(function () {
    var oc_timer;
    $(window).bind('orientationchange', function () {
        clearTimeout(oc_timer);
        oc_timer = setTimeout(function () {
            device_width = $(window).width();
        }, 500);
    });
});


0 commentaires

3
votes

J'ai trouvé un moyen de le faire au cas où d'autres ont toujours le même problème, vérifiez-le:

function onOrientationChange() {
    if (typeof(this.orientation) === "undefined"){
        if (window.orientation == -90 || window.orientation == 90) {
            this.orientation = "landscape";
        } else {
            this.orientation = "portrait";
        }
        // alert ("in 1");
        // you code here for change
    }

    if ((window.orientation == -90 || window.orientation == 90) && (this.orientation == "portrait")) {
        this.orientation = "landscape";
        // alert ("in 2");
        // you code here for change
    }

    if ((window.orientation == 0 || window.orientation == 180) && (this.orientation == "landscape")) {
        this.orientation = "portrait";
        // alert ("in 3");
        // you code here for change
    }
}   


2 commentaires

Surveillez les onglets dans votre code ici, ils sont supprimés, mieux d'utiliser des espaces pour indenter car ils sont cohérents partout.


Comment appelez-vous cette fonction? Êtes-vous la liaison à l'événement OrientationChange? Ou simplement l'appeler tous les 500ms à travers Settimeout?



0
votes

solution simple pour des applications moins détaillées xxx

Vous pouvez également utiliser $ .on () à la place si vous devez passer des informations.

dans les navigateurs qui ne supportent pas cela, l'événement ne tire pas. Vous pouvez ensuite écrire un script de détection personnalisé comme une replie pour déclencher l'événement si l'orientation change sur un périphérique qui ne prend pas en charge l'onorientationChanger.


0 commentaires