Phonegap - Предотвратить вращение при включенной автоматической ориентации? - PullRequest
5 голосов
/ 22 июня 2011

Я публикую чей-то вопрос, который я нашел в группах Google, у меня похожая проблема:


У меня есть приложение, которое требует, чтобы все было в книжной ориентации, кроме случаев, когда оно воспроизводит видео. В iOS, когда воспроизведение видео передается в проигрыватель Quicktime, я хочу, чтобы видео можно было воспроизводить в альбомном режиме. В настоящее время видео воспроизводится только в книжном режиме, так как кажется, что оно наследует портрет - только из приложения телефонной пропасти. Мое решение может состоять в том, чтобы изменить Phonegap.plist на Auto rotate, но тогда я бы хотел иметь возможность использовать javascript для отслеживания изменений поворота и предотвращения их на каждой странице приложения, кроме воспроизведения видео. Это звучит выполнимо? Есть ли другой способ заставить альбомную ориентацию только для конкретной страницы приложения? Спасибо!


Я попробовал следующее с включенным автоповоротом, но безуспешно:

$(document).ready(function(){
  document.addEventListener('orientationchange', function(e) { e.preventDefault(); }, false);
});

1 Ответ

2 голосов
/ 10 августа 2011
$(window).bind("orientationchange", function(){
    var orientation = window.orientation;
    var new_orientation = (orientation) ? 0 : 180 + orientation;
    $('body').css({
        "-webkit-transform": "rotate(" + new_orientation + "deg)"
    });
});

Это рискованный способ, но он думает, что это единственный путь.

Альтернатива, которую вы можете привязать к событию изменения размера окна.

$(window).bind("resize", function(){
    var orientation = window.orientation;
    var new_orientation = (orientation) ? 0 : 180 + orientation;
    $('body').css({
        "-webkit-transform": "rotate(" + new_orientation + "deg)"
    });
});

Некоторое время назад я написал этот небольшой скрипт: он исправляет ошибку обратного вызова многократного изменения размера в iOS-сафари и ошибку неориентирования / позднего / раннего запуска (1) в Android.

(1) Иногда это не срабатывает иногда до, а иногда после того, как браузер меняет ширину + высоту?Проводной!

if (!(/iphone|ipad/gi).test(navigator.appVersion)) {
    $(window).unbind("resize").bind("resize", function() {
        $(window).trigger("orientationchange");
    });
}

Если вы не iphone или ipad, вы запускаете событие directionalchange в окне.

Поэтому, когда вы свяжете какую-либо функцию, вы изменяете ее размер, и вы меняете ориентацию.

См .: http://jsfiddle.net/aalouv/sABRQ/1/

...