Определить ориентацию области просмотра, если ориентация является вертикальной, выводит на экран предупреждающее сообщение с инструкциями для пользователя - PullRequest
175 голосов
/ 07 февраля 2011

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

Есть ли способ определить, просматривает ли пользователь, посещающий эту страницу, ее в портретном режиме, и, если да, отобразить сообщение, информирующее пользователя о том, что страницу лучше всего просматривать в альбомном режиме? Если пользователь уже просматривает его в альбомном режиме, сообщение не появится.

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

Большое спасибо, Dan

Ответы [ 31 ]

1 голос
/ 07 февраля 2011

Спасибо tobyodavies за руководство.

Чтобы получить предупреждающее сообщение в зависимости от ориентации мобильного устройства, вам необходимо реализовать следующий скрипт в function setHeight() {

if(window.innerHeight > window.innerWidth){
    alert("Please view in landscape");
}
1 голос
/ 09 июня 2016

Я использовал для Android Chrome "API ориентации экрана"

Чтобы посмотреть текущую ориентацию, вызовите console.log (screen.orientation.type) (и, возможно, screen.orientation.angle).

Результаты: портретно-начальный | второстепенный портрет | ландшафтно-первичный | ландшафтном вторичный

Ниже мой код, надеюсь, он будет полезен:

var m_isOrientation = ("orientation" in screen) && (typeof screen.orientation.lock == 'function') && (typeof screen.orientation.unlock == 'function');
...
if (!isFullscreen()) return;
screen.orientation.lock('landscape-secondary').then(
    function() {
        console.log('new orientation is landscape-secondary');
    },
    function(e) {
        console.error(e);
    }
);//here's Promise
...
screen.orientation.unlock();
  • Я тестировал только для Android Chrome - хорошо
1 голос
/ 11 мая 2016

Вот лучший метод, который я нашел, основываясь на статье Дэвида Уолша ( Обнаружение изменения ориентации на мобильных устройствах )

if ( window.matchMedia("(orientation: portrait)").matches ) {  
   alert("Please use Landscape!") 
}

Объяснение:

Window.matchMedia () - это собственный метод, который позволяет определять правило медиа-запроса и проверять его действительность в любой момент времени.

Я считаю его полезным дляприсоедините слушатель onchange к возвращаемому значению этого метода.Пример:

var mediaQueryRule = window.matchMedia("(orientation: portrait)")
mediaQueryRule.onchange = function(){ alert("screen orientation changed") }
1 голос
/ 30 сентября 2015

Это расширяет предыдущий ответ. Лучшее решение, которое я нашел, - создать безобидный атрибут CSS, который появляется только в случае удовлетворения медиазапроса CSS3, а затем выполнить тест JS для этого атрибута.

Так, например, в CSS вы должны иметь:

@media screen only and (orientation:landscape)
{
    //  Some innocuous rule here
    body
    {
        background-color: #fffffe;
    }
}
@media screen only and (orientation:portrait)
{
    //  Some innocuous rule here
    body
    {
        background-color: #fffeff;
    }
}

Затем вы переходите на JavaScript (я использую jQuery для забавы). Декларации цвета могут быть странными, поэтому вы можете использовать что-то еще, но это самый надежный метод, который я нашел для тестирования. Затем вы можете просто использовать событие изменения размера, чтобы узнать о переключении. Соберите все вместе для:

function detectOrientation(){
    //  Referencing the CSS rules here.
    //  Change your attributes and values to match what you have set up.
    var bodyColor = $("body").css("background-color");
    if (bodyColor == "#fffffe") {
        return "landscape";
    } else
    if (bodyColor == "#fffeff") {
        return "portrait";
    }
}
$(document).ready(function(){
    var orientation = detectOrientation();
    alert("Your orientation is " + orientation + "!");
    $(document).resize(function(){
        orientation = detectOrientation();
        alert("Your orientation is " + orientation + "!");
    });
});

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

1 голос
/ 31 августа 2018

Если у вас установлены последние версии браузеров, window.orientation может не работать.В этом случае используйте следующий код для получения угла -

var orientation = window.screen.orientation.angle;

Это все еще экспериментальная технология, вы можете проверить совместимость браузера здесь

1 голос
/ 06 апреля 2017

Это то, что я использую.

function getOrientation() {

    // if window.orientation is available...
    if( window.orientation && typeof window.orientation === 'number' ) {

        // ... and if the absolute value of orientation is 90...
        if( Math.abs( window.orientation ) == 90 ) {

              // ... then it's landscape
              return 'landscape';

        } else {

              // ... otherwise it's portrait
              return 'portrait';

        }

    } else {

        return false; // window.orientation not available

    }

}

Осуществление

window.addEventListener("orientationchange", function() {

     // if orientation is landscape...
     if( getOrientation() === 'landscape' ) {

         // ...do your thing

    }

}, false);
0 голосов
/ 03 октября 2018

Некоторые устройства не предоставляют событие orientationchange, но запускают событие изменения размера окна:

// Listen for resize changes
window.addEventListener("resize", function() {
    // Get screen size (inner/outerWidth, inner/outerHeight)

}, false);

Немного менее очевидно, чем событие directionalchange, но работает очень хорошо. Пожалуйста, проверьте здесь

0 голосов
/ 08 января 2015
<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
  <title>Rotation Test</title>
  <link type="text/css" href="css/style.css" rel="stylesheet"></style>
  <script src="js/jquery-1.5.min.js" type="text/javascript"></script>
  <script type="text/javascript">
        window.addEventListener("resize", function() {
            // Get screen size (inner/outerWidth, inner/outerHeight)
            var height = $(window).height();
            var width = $(window).width();

            if(width>height) {
              // Landscape
              $("#mode").text("LANDSCAPE");
            } else {
              // Portrait
              $("#mode").text("PORTRAIT");
            }
        }, false);

  </script>
 </head>
 <body onorientationchange="updateOrientation();">
   <div id="mode">LANDSCAPE</div>
 </body>
</html>
0 голосов
/ 30 июля 2016

Есть способ, с помощью которого вы можете определить, переключил ли пользователь свое устройство в портретный режим, используя screen.orientation

Просто используйте приведенный ниже код:

screen.orientation.onchange = function () {
     var type = screen.orientation.type;
     if (type.match(/portrait/)) {
         alert('Please flip to landscape, to use this app!');
     }
}

Теперь onchange будетменя увольняют, когда пользователь переворачивает устройство, и появляется предупреждение, когда пользователь использует портретный режим.

0 голосов
/ 04 мая 2017

Или вы можете просто использовать это ..

window.addEventListener("orientationchange", function() {
    if (window.orientation == "90" || window.orientation == "-90") {
        //Do stuff
    }
}, false);
...