Размер браузера (ширина и высота)

Я пытаюсь определить текущий размер браузера (ширину и высоту). Я знаю, что в jQuery с $(document).width and $(document).height это очень просто, но я не хочу добавлять в проект размер библиотеки jQuery, поэтому я бы предпочел просто использовать встроенный JavaScript. Каков был бы короткий и эффективный способ сделать то же самое с JavaScript?


person dono    schedule 18.03.2010    source источник
comment
На этот вопрос довольно хорошо дан ответ: stackoverflow.com/questions/1766861/   -  person vsync    schedule 23.03.2010


Ответы (5)


function getWindowSize(){
 var d= document, root= d.documentElement, body= d.body;
 var wid= window.innerWidth || root.clientWidth || body.clientWidth, 
 hi= window.innerHeight || root.clientHeight || body.clientHeight ;
 return [wid,hi]
}

Браузеры IE - единственные, кто не использует innerHeight и Width.

Но не существует «стандартных» - только браузерные реализации.

Проверьте html (document.documentElement) clientHeight перед проверкой тела - если он не равен 0, это высота «области просмотра», а body.clientHeight - это высота тела, которая может быть больше или меньше окна .

Обратный режим возвращает 0 для корневого элемента и высоту окна (области просмотра) от тела.

То же самое с шириной.

person kennebec    schedule 19.03.2010

Попробуй это;

 <script type="text/javascript"> 
winwidth=document.all?document.body.clientWidth:window.innerWidth; 
winHeight=document.all?document.body.clientHeight:window.innerHeight; 
alert(winwidth+","+winHeight);
</script> 
person Enrique    schedule 18.03.2010
comment
Вы не должны использовать проверку браузера, например document.all, вместо этого убедитесь, что clientWidth не определено. - person Joel; 19.03.2010
comment
@Joel, почему бы и нет, не могли бы вы поделиться своим ответом. Спасибо - person dono; 19.03.2010
comment
Тот факт, что браузер реализует или не реализует document.all, не означает, что он реализует или не реализует document.body.clientHeight. Вы должны проверить желаемое свойство, а не несвязанное имущество. - person Joel; 19.03.2010
comment
это дает рост тела, а не высоту браузера. - person vsync; 23.03.2010

Вот пример кода

function getSize(){

var w=window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;

var h=window.innerHeight || document.documentElement.clientHeight ||document.body.clientHeight;


}
person Sriwantha Attanayake    schedule 14.04.2013

Мой случай использования window.innerWidth включал создание настраиваемого модального всплывающего окна. Проще говоря, пользователь нажимает кнопку, всплывающее окно открывается по центру браузера, а за всплывающим окном находится прозрачный черный bkgd. Моя проблема заключалась в том, чтобы найти ширину и высоту браузера для создания прозрачного bkgd.

window.innerWidth отлично подходит для определения ширины, но помните, что window.innerWidth and window.innerHeight не компенсирует полосы прокрутки, поэтому, если ваш контент выходит за пределы видимой области содержимого. Мне пришлось вычесть из значения 17 пикселей.

transBkgd.style.width = (window.innerWidth - 17) + "px";

Поскольку содержание сайта всегда выходило за пределы видимой высоты, я не мог использовать window.innerHeight. Если бы пользователь прокручивал вниз, прозрачный bkgd заканчивался на этом месте, и это выглядело неприятно. Чтобы сохранить прозрачность bkgd до самого низа содержимого, я использовал document.body.clientHeight.

transBkgd.style.height = document.body.clientHeight + "px";

Я протестировал всплывающее окно в IE, FF, Chrome, и во всех отношениях оно выглядит хорошо. Я знаю, что это не слишком соответствует исходному вопросу, но я полагаю, что это может помочь, если кто-то еще столкнется с той же проблемой при создании настраиваемого модального всплывающего окна.

person Dzeimsas Zvirblis    schedule 12.07.2012

person    schedule
comment
Размер тела не совпадает с размером окна, который на самом деле является желаемым. - person vsync; 23.03.2010
comment
Это можно оптимизировать с помощью операторов короткого замыкания. пример: width: window.innerWidth || document.body.clientWidth - person Peter Di Cecco; 23.03.2010
comment
@vsync, это правда, но размер окна определяется не всеми браузерами. @ Питер, хорошее замечание. Я обновлю это. - person Joel; 23.03.2010