Я считаю, что правильный ответ уже был опубликован и принят, но есть проблема, с которой я столкнулся сам и о которой некоторые другие упоминали здесь.
На некоторых платформах различные свойства, такие как размеры окна (window.innerWidth
, window.innerHeight
) и свойство window.orientation
, не будут обновлены к моменту запуска события "orientationchange"
. Часто свойство window.orientation
равно undefined
в течение нескольких миллисекунд после срабатывания "orientationchange"
(по крайней мере, в Chrome на iOS).
Лучший способ, который я нашел для решения этой проблемы, был:
var handleOrientationChange = (function() {
var struct = function(){
struct.parse();
};
struct.showPortraitView = function(){
alert("Portrait Orientation: " + window.orientation);
};
struct.showLandscapeView = function(){
alert("Landscape Orientation: " + window.orientation);
};
struct.parse = function(){
switch(window.orientation){
case 0:
//Portrait Orientation
this.showPortraitView();
break;
default:
//Landscape Orientation
if(!parseInt(window.orientation)
|| window.orientation === this.lastOrientation)
setTimeout(this, 10);
else
{
this.lastOrientation = window.orientation;
this.showLandscapeView();
}
break;
}
};
struct.lastOrientation = window.orientation;
return struct;
})();
window.addEventListener("orientationchange", handleOrientationChange, false);
Я проверяю, является ли ориентация либо неопределенной, либо ориентация равна последней обнаруженной ориентации. Если любое из этих значений истинно, я жду десять миллисекунд и затем снова анализирую ориентацию. Если ориентация правильная, я вызываю функции showXOrientation
. Если ориентация неверна, я продолжаю цикл проверки, ожидая десять миллисекунд каждый раз, пока она не станет действительной.
Теперь я бы сделал JSFiddle для этого, как обычно делал, но JSFiddle не работал для меня, и моя ошибка поддержки для него была закрыта, так как никто другой не сообщил об этой проблеме. Если кто-то еще хочет превратить это в JSFiddle, пожалуйста, продолжайте.
Спасибо! Надеюсь, это поможет!