У меня есть веб-сайт, который будет изменять отображаемое изображение в зависимости от того, является ли ориентация мобильного устройства книжной или альбомной.То, что я сейчас нахожу, это текущий код, который у меня иногда работает, но на случайных устройствах он не будет работать так, как задумано.Ориентация устройства будет изменена, поэтому страница, которую я хочу показать на портрете, будет показана в альбомной ориентации и наоборот.Вот код, который я использую, который работает на всех устройствах Android, но будет работать на некоторых устройствах iOS, но не работает на других.
// determines device type for orientation
var isMobile = {
Android: function() {
return navigator.userAgent.match(/Android/i);
},
BlackBerry: function() {
return navigator.userAgent.match(/BlackBerry/i);
},
iOS: function() {
return navigator.userAgent.match(/iPhone|iPad|iPod/i);
},
Opera: function() {
return navigator.userAgent.match(/Opera Mini/i);
},
Windows: function() {
return navigator.userAgent.match(/IEMobile/i);
},
any: function() {
return (isMobile.Android() || isMobile.BlackBerry() || isMobile.iOS() || isMobile.Opera() || isMobile.Windows());
}
};
window.addEventListener("orientationchange", function() {
// if it is an iPhone, swap screen orientation doing this
if(isMobile.iOS()){
if (window.matchMedia("(orientation: portrait)").matches) {
// you're in PORTRAIT mode
potraitBody.classList.add("hideThisDiv");
landscapeBody.classList.remove("hideThisDiv");
}
if (window.matchMedia("(orientation: landscape)").matches) {
// you're in LANDSCAPE mode
potraitBody.classList.remove("hideThisDiv");
landscapeBody.classList.add("hideThisDiv");
}
}
// if it is on Android swap screen orientation doing this
if(isMobile.Android()) {
if(screen.orientation.angle == 0)
{
// portrait
potraitBody.classList.remove("hideThisDiv");
landscapeBody.classList.add("hideThisDiv");
}
else
{
// landscape
potraitBody.classList.add("hideThisDiv");
landscapeBody.classList.remove("hideThisDiv");
}
}
}, false);
Моим первым решением для решения этой проблемы было использование прослушивателя для oreintationchange,затем просто проверяем, была ли ориентация 0 (книжная) или нет 0 (альбомная).Это работает на некоторых устройствах iOS и всех устройствах Android.Затем я добавил специальную проверку для устройств iOS, полагая, что все они ориентированы одинаково, но при проверке на iPhone 10 мой код работает, а на модели iPhone 7 или iPad Pro 2017 - нет.Есть ли решение для правильной проверки ориентации на всех мобильных устройствах?Я на самом деле не хочу выискивать каждое устройство, которое может использовать мой сайт специально для этого.
Спасибо!
Редактировать:
Если мой вопрос недостаточно конкретен, я ищу способ проверить, работает ли какое-либо мобильное устройство в горизонтальном или горизонтальном режиме.Если возможно, я бы не хотел проходить и делать случаи модели за моделью, но ОС за ОС хорошо.Я думаю, что есть универсальный способ проверить ориентацию экрана на мобильном телефоне.