Подтвердить что ты не робот

Обнаружить изменение ориентации с помощью javascript

Можно ли обнаружить изменение ориентации браузера на iPad или Galaxy Tab с помощью javascript? Я думаю, что это возможно с использованием запросов css media.

4b9b3361

Ответ 1

ОБНОВИТЬ:

Вы можете проверить

jQuery мобильная ориентация

или простой JS один:

window.addEventListener("orientationchange", function() {
  alert(window.orientation);
}, false);

MDN:

window.addEventListener("orientationchange", function() {
    alert("the orientation of the device is now " + screen.orientation.angle);
});

Старый ответ

http://www.nczonline.net/blog/2010/04/06/ipad-web-development-tips/

Safari на iPad поддерживает свойство window.orientation, поэтому при необходимости вы можете использовать его, чтобы определить, находится ли пользователь в горизонтальном или вертикальном режиме. Как напоминание об этой функциональности:

window.orientation is 0 when being held vertically
window.orientation is 90 when rotated 90 degrees to the left (horizontal)
window.orientation is -90 when rotated 90 degrees to the right (horizontal)

Существует также событие directionalchange, которое запускается в объекте окна при повороте устройства.

Вы также можете использовать медиазапросы CSS, чтобы определить, находится ли iPad в вертикальной или горизонтальной ориентации, например:

<link rel="stylesheet" media="all and (orientation:portrait)" href="portrait.css">
<link rel="stylesheet" media="all and (orientation:landscape)" href="landscape.css">

http://www.htmlgoodies.com/beyond/webmaster/toolbox/article.php/3889591/Detect-and-Set-the-iPhone--iPads-Viewport-Orientation-Using-JavaScript-CSS-and-Meta-Tags.htm

<script type="text/javascript">
var updateLayout = function() {
  if (window.innerWidth != currentWidth) {
    currentWidth = window.innerWidth;
    var orient = (currentWidth == 320) ? "profile" : "landscape";
    document.body.setAttribute("orient", orient);
    window.scrollTo(0, 1);
  }
};

iPhone.DomLoad(updateLayout);
setInterval(updateLayout, 400);
</script>

Ответ 2

Вы можете использовать событие changechange следующим образом:

window.addEventListener('orientationchange', function(){
     /* update layout per new orientation */
});

Ответ 3

window.orientation - это то, что вы ищете. там также событие onOrientationChange работает для android, iphone и, я в основном уверен, для ipad

Ответ 4

Добавляя к ответу @mplungjan, я нашел лучшие результаты, используя webkit "native" (я действительно не называю это) событие, deviceorientation.

В сети Mozilla Developer у них есть хорошее объяснение того, как нормализовать между webkit и Gecko, которые помогли мне решить эту проблему.

Ответ 5

Вы можете использовать mediaMatch для оценки запросов к мультимедиа CSS, например.

window
    .matchMedia('(orientation: portrait)')
    .addListener(function (m) {
        if (m.matches) {
            // portrait
        } else {
            // landscape
        }
    });

Запрос мультимедийных сообщений CSS перед orientationchange. Если вы хотите захватить конец события (когда ротация завершена), см. высота мобильного просмотра после изменения ориентации.

Ответ 6

Простой в использовании фрагмент:

function doOnOrientationChange()
{
    switch(window.orientation)
    { 
        case -90:
        case 90:
          // alert('landscape');
          $('#portrait').css({display:'none'});
          $('#landscape').css({display:'block'});

          break;
        default:
          // alert('portrait');
          $('#portrait').css({display:'block'});
          $('#landscape').css({display:'none'});
          break;
    }
}

window.addEventListener('orientationchange', doOnOrientationChange);

// First launch
doOnOrientationChange();

Ответ 7

Из " Кросс-устройства, кросс-браузерное обнаружение портрета и пейзажа "

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

$(window).bind("resize", function(){
    screenOrientation = ($(window).width() > $(window).height())? 90 : 0;
});

90 означает пейзаж, 0 означает портрет, кросс-браузер, кросс-устройство.

Событие window.onresize доступно везде и всегда происходит в нужное время; никогда не рано, никогда не поздно. На самом деле, размер экрана также всегда точен.

Версия JavaScript будет такой, поправьте меня, пожалуйста, если я ошибаюсь.

  function getScreenOrientation() {
    screenOrientation = window.outerWidth > window.outerHeight ? 90 : 0;
    console.log("screenOrientation = " + screenOrientation);
  }
  window.addEventListener("resize", function(event) {
    getScreenOrientation();
  });
  getScreenOrientation();