Получить высоту и ширину окна просмотра браузера без полос прокрутки, используя jquery?
Как получить высоту и ширину окна просмотра браузера без полос прокрутки, используя jQuery?
Вот что я пробовал до сих пор:
var viewportWidth = $("body").innerWidth();
var viewportHeight = $("body").innerHeight();
Это решение не учитывает полосы прокрутки браузера.
10 ответов
$(window).height();
$(window).width();
Больше информации
Однако использование jQuery не обязательно для получения этих значений. использование
document.documentElement.clientHeight;
document.documentElement.clientWidth;
чтобы получить размеры, исключая полосы прокрутки, или
window.innerHeight;
window.innerWidth;
чтобы получить весь видовой экран, включая полосы прокрутки.
document.documentElement.clientHeight <= window.innerHeight; // is always true
Не используйте jQuery, просто используйте javascript для правильного результата:
var windowWidth = window.innerWidth;
var windowHeight = window.innerHeight;
alert('viewport width is: '+ windowWidth + ' and viewport height is:' + windowHeight);
NB: это включает ширину / высоту полосы прокрутки.
Вот общий JS, который должен работать в большинстве браузеров (FF, Cr, IE6+):
var viewportHeight;
var viewportWidth;
if (document.compatMode === 'BackCompat') {
viewportHeight = document.body.clientHeight;
viewportWidth = document.body.clientWidth;
} else {
viewportHeight = document.documentElement.clientHeight;
viewportWidth = document.documentElement.clientWidth;
}
Вы используете неправильные вызовы методов. Окно просмотра - это "окно", открытое в документе: сколько его можно увидеть и где.
С помощью $(window).height()
не даст вам размер области просмотра, он даст вам размер всего окна, которое обычно является размером всего документа, хотя документ может быть даже больше.
Чтобы получить размер фактического просмотра используйте window.innerHeight
а также window.innerWidth
,
https://gist.github.com/bohman/1351439
Не используйте методы jQuery, например $(window).innerHeight()
, поскольку они дают неправильные номера. Они дают вам высоту окна, а не innerHeight
,
Описание
Ниже приведен размер окна просмотра браузера.
Образец
$(window).height(); // returns height of browser viewport
$(window).width(); // returns width of browser viewport
Дополнительная информация
Как предложил Кайл, вы можете измерить размер окна просмотра клиентского браузера, не принимая во внимание размер полос прокрутки.
Образец (Размеры окна просмотра БЕЗ полос прокрутки)
// First you forcibly request the scroll bars to hidden regardless if they will be needed or not.
$('body').css('overflow', 'hidden');
// Take your measures.
// (These measures WILL NOT take into account scroll bars dimensions)
var heightNoScrollBars = $(window).height();
var widthNoScrollBars = $(window).width();
// Set the overflow css property back to it's original value (default is auto)
$('body').css('overflow', 'auto');
В качестве альтернативы, если вы хотите найти размеры окна просмотра клиента, принимая во внимание размер полос прокрутки, то этот пример ниже подходит вам.
Во-первых, не забудьте установить ширину и высоту тега body на 100%, чтобы убедиться, что измерение точное.
body {
width: 100%; // if you wish to measure the width and take into account the horizontal scroll bar.
height: 100%; // if you wish to measure the height while taking into account the vertical scroll bar.
}
Образец (размеры окна просмотра с полосами прокрутки)
// First you forcibly request the scroll bars to be shown regardless if they will be needed or not.
$('body').css('overflow', 'scroll');
// Take your measures.
// (These measures WILL take into account scroll bars dimensions)
var heightWithScrollBars = $(window).height();
var widthWithScrollBars = $(window).width();
// Set the overflow css property back to it's original value (default is auto)
$('body').css('overflow', 'auto');
Сценарий $(window).height()
работает хорошо (показывает высоту области просмотра, а не документ с высотой прокрутки), НО это требует правильного размещения тега doctype в документе, например, следующие типы doctype:
Для HTML5: <!doctype html>
для переходного html4: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
Вероятно, тип документа по умолчанию, предполагаемый некоторыми браузерами, таков, что $(window).height()
принимает высоту документа, а не высоту браузера. Со спецификацией doctype она удовлетворительно решена, и я уверен, что вы, peps, избежите "изменения переполнения прокрутки на скрытый и затем обратно", что, извините, немного подвох, особенно если вы не Запишите это в коде для использования в будущем программистом.
Более того, если вы делаете сценарий, вы можете изобрести тесты, чтобы помочь программистам в ваших библиотеках, позвольте мне изобрести пару:
$(document).ready(function() {
if(typeof $=='undefined') {
alert("Error, you haven't called JQuery library");
}
if(document.doctype==null || screen.height < parseInt($(window).height()) ) {
alert("ERROR, check your doctype, the calculated heights are not what you might expect");
}
});
$(document).ready(function() {
//calculate the window height & add css properties for height 100%
wh = $( window ).height();
ww = $( window ).width();
$(".targeted-div").css({"height": wh, "width": ww});
});
Используя jQuery...
$ (document).height () & $ (window).height () вернет те же значения... ключ в том, чтобы сбросить отступы и отступы тела, чтобы вы не получали прокрутку.
<!--
body {
padding: 0px;
margin: 0px;
position: relative;
}
-->
Надеюсь это поможет.
Я хотел другой внешний вид моего сайта для ширины экрана и маленького экрана. Я сделал 2 CSS-файла. В Java я выбираю, какой из 2 CSS-файлов используется в зависимости от ширины экрана. Я использую функцию PHP echo
с в echo
-функция некоторого JavaScript.
мой код в <header>
раздел моего PHP-файла:
<?php
echo "
<script>
if ( window.innerWidth > 400)
{ document.write('<link href=\"kekemba_resort_stylesheetblog-jun2018.css\" rel=\"stylesheet\" type=\"text/css\">'); }
else
{ document.write('<link href=\"kekemba_resort_stylesheetblog-jun2018small.css\" rel=\"stylesheet\" type=\"text/css\">'); }
</script>
";
?>