начальное окно.ориентация всегда 0 на Windows Phone

Я пытаюсь определить ориентацию устройства на своем веб-сайте.

Значение ориентации кажется правильным после события orientationchange.

$(window).on("orientationchange",function(event){alert(window.orientation);}) 

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

$(document).ready(function(){alert(window.orientation);});

Он не меняется с некоторой задержкой (я это проверял), он меняется на правильное значение только после события orientationchange.

Есть ли способ получить правильную ориентацию при запуске страницы?


person el vis    schedule 02.07.2015    source источник


Ответы (3)


Похоже, что это свойство на самом деле не поддерживается ни в чем, кроме Chrome для Android: https://developer.mozilla.org/en-US/docs/Web/API/Screen/orientation

В зависимости от того, что вы хотите сделать, вы можете использовать правила CSS?

@media only screen and (max-width: 999px) {
  /* rules that only apply for canvases narrower than 1000px */
}

@media only screen and (device-width: 768px) and (orientation: landscape) {
  /* rules for iPad in landscape orientation */
}

@media only screen and (min-device-width: 320px) and (max-device-width:    480px) {
  /* iPhone, Android rules here */
}
person Siada    schedule 06.07.2015
comment
Это поддерживается в Windows Phone - когда я делаю поворот, значение ориентации правильное, проблема возникает перед любым поворотом устройства. Я не могу использовать правила CSS, потому что они относятся к размерам экрана, а не к самому значению window.orientation, которое может отличаться для некоторых устройств, даже если оба находятся в горизонтальном положении, например. pioul.fr/ - person el vis; 06.07.2015
comment
@pawlakppp, если вы на самом деле читали статью, на которую вы ссылаетесь, в ней говорится, что window.orientation не следует доверять, а также приводятся примеры того, как разные браузеры дают разные результаты в одних и тех же ситуациях. - person Siada; 06.07.2015
comment
ему не следует доверять, если вы хотите получить альбомную/портретную позицию на основе окна.ориентация. Я не хочу этого. Я использую значения акселерометра из javascript, и я использую относительные значения ускорения x или y на основе окна.ориентация. Вот почему мне это нужно. - person el vis; 06.07.2015

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

$(document).ready(function(){
    $(window).load(function(){
        alert(window.orientation);
    });
});

в качестве альтернативы вы можете получить ориентацию устройства вручную:

$(document).ready(function(){
    alert((($(window).width()>$(window).height()) ? 90 : 0));
});
person Amin Jafari    schedule 10.07.2015
comment
Да, я пробовал подобные подходы, но это совсем не меняется. Я не могу получить ориентацию вручную, потому что некоторые устройства имеют ориентацию = 0, когда window.width больше, чем window.height - например, Galaxy Tab (pioul.fr/) - person el vis; 10.07.2015

Я только что протестировал его на Windows Phone, и он работает. Какой телефон/ОС/браузер вы используете?

person Vincent Fabris    schedule 10.07.2015
comment
WP 8.1, браузер стандартный IE. Не могли бы вы открыть этот JSBin: output.jsbin.com/guvixu в горизонтальном положении и какое значение будет показано ? - person el vis; 11.07.2015