Неправильное определение высоты окна браузера
Здравствуйте!
У меня возникла проблема с определением высоты окна браузера в моб. устройствах. Задачей является задание определенному элементу высоты в зависимости от высоты окна. Я определяю высоту окна вот так: $(window).height(); и в компьютерных браузерах все работает отлично, но вот в мобильных почему-то в итоге определяет меньшую высоту, чем есть на самом деле. Кто знает, как можно решить этот косяк? Уже не в первый раз кстати встречаю его. |
Скажем, на iPhone6 погрешность составляет почти 100 пикселей, на других моделях меньше, но она все равно есть.
|
Попробуй на javascript
window.screen.height |
Barbos,
При этом выбивается длина самого экрана, а он меньше. На том же Айфоне она меньше, да на любом устройстве, чем высота окна браузера (видимо, браузер эмулирует). Полазил по англоязычному нету немного, там тоже решения толком нету. Все из-за того, что адресс-бар (вверху) сбивает правильные вычисления. А точной технологии так и не нашел. |
vettel, viewport:
window.innerHeight || window.document.documentElement.clientHeight |
Rise,
мне нужен вьюпорт, и window.innerHeight || window.document.documentElement.clientHeight тоже не канает, выдает одно и то же значение, что и window.height() (разница в 1-2 пикселя), то есть со значительной погрешностью. |
Полазил по английскому нету немного, там тоже толком решения проблемы нет.
Но есть такой фикс, который хорошо работает под iOS, может кому-то интересно будет:
var getIOSWindowHeight = function() { // Get zoom level of mobile Safari
// Note, that such zoom detection might not work correctly in other browsers
// We use width, instead of height, because there are no vertical toolbars :)
var zoomLevel = document.documentElement.clientWidth / window.innerWidth;
// window.innerHeight returns height of the visible area.
// We multiply it by zoom and get out real height.
return window.innerHeight * zoomLevel;
};
// You can also get height of the toolbars that are currently displayed
var getHeightOfIOSToolbars = function() {
var tH = (window.orientation === 0 ? screen.height : screen.width) - getIOSWindowHeight();
return tH > 1 ? tH : 0;
alert(tH);
};
Соответственно, правильная полная длина окна - сумма результатов двух функций. В случае надобности (при наличии адресс-бара) просто берется результат первой функции. В Андроиде тоже работает, но немного по-другому - там для правильного вычисления при наличии адрессбара нужно резалт второй функции поделить на 2 где-то, хотя точного резалта все равно не будет. Это погрешность мобильных устройств. |
Цитата:
Цитата:
|
| Часовой пояс GMT +3, время: 00:00. |