javascript android window.onorientationchange запускается непрерывно - PullRequest
6 голосов
/ 23 августа 2011

Я пытаюсь обнаружить изменения ориентации на мобильных устройствах и вызвать функцию, как только ориентация завершена, но код внутри функции постоянно срабатывает в Android, и я не уверен, почему.Вот мой код:

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

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

Кто-нибудь знает, как написать это так, чтобы оно срабатывало только один раз, после того, как изменение ориентации было завершено?

Ответы [ 3 ]

8 голосов
/ 23 августа 2011

Я использовал обходной путь для этого в своем приложении. Я добавил прослушиватель событий для изменения ориентации, а затем установил таймаут, чтобы могло произойти изменение ориентации, и я смог получить новое значение ширины, которое фактически отражает ширину после изменения ориентации.

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);
    });
});

Я не уверен, что это решит проблему с функцией непрерывного увольнения, но я нашел решение, которое сработало.

3 голосов
/ 22 ноября 2012

Я нашел способ сделать это в случае, если у других все еще есть та же проблема, проверьте это:

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
    }
}   
0 голосов
/ 30 мая 2013

Простое решение для менее подробных приложений

//bind orientation change event
$(window).bind("orientationchange", orientationChange);

//later,

function orientationChange(){
    //whatever needs to happen when it changes.
    alert("changed");
}

Вы также можете использовать $ .on () вместо этого, если вам нужно передать информацию.

В браузерах, которые не поддерживают ее,событие не срабатывает.Затем вы можете написать собственный сценарий обнаружения в качестве запасного варианта для запуска события, если ориентация изменяется на устройстве, которое не поддерживает onorientationchange.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...