Обновление на 2017 год
Мой оригинальный ответ был написан в 2009 году. Хотя он все еще работает, я бы хотел обновить его на 2017 год. Браузеры могут вести себя по-другому. Я надеюсь, что команда jQuery отлично справится с задачей обеспечения согласованности между браузерами. Однако нет необходимости включать всю библиотеку. В источнике jQuery соответствующая часть находится в строке 37 измерения .js . Здесь это извлечено и изменено, чтобы работать автономно:
function getWidth() {
return Math.max(
document.body.scrollWidth,
document.documentElement.scrollWidth,
document.body.offsetWidth,
document.documentElement.offsetWidth,
document.documentElement.clientWidth
);
}
function getHeight() {
return Math.max(
document.body.scrollHeight,
document.documentElement.scrollHeight,
document.body.offsetHeight,
document.documentElement.offsetHeight,
document.documentElement.clientHeight
);
}
console.log('Width: ' + getWidth() );
console.log('Height: ' + getHeight() );
Оригинальный ответ
Поскольку все браузеры ведут себя по-разному, вам нужно сначала проверить значения, а затем использовать правильный. Вот функция, которая делает это для вас:
function getWidth() {
if (self.innerWidth) {
return self.innerWidth;
}
if (document.documentElement && document.documentElement.clientWidth) {
return document.documentElement.clientWidth;
}
if (document.body) {
return document.body.clientWidth;
}
}
и аналогично для высоты:
function getHeight() {
if (self.innerHeight) {
return self.innerHeight;
}
if (document.documentElement && document.documentElement.clientHeight) {
return document.documentElement.clientHeight;
}
if (document.body) {
return document.body.clientHeight;
}
}
Вызовите оба из них в ваших сценариях, используя getWidth()
или getHeight()
. Если ни одно из собственных свойств браузера не определено, оно вернется undefined
.
self.innerWidth 423
,document.documentElement.clientWidth 326
иdocument.body.clientWidth 406
. В таком случае вопрос: что правильно и что использовать? Например, я хочу изменить размер карты Google. 326 или 423 большая разница. Если ширина ~ 700, то см. 759, 735, 742 (небольшая разница)var pageWidth = Math.max(self.innerWidth || 0, document.documentElement.clientWidth || 0, document.body.clientWidth || 0);
иvar windowWidth = self.innerWidth || -1;
// потому что «тело», «экран» или «документ» не являются «окном», если вы проверяете переполненное содержимое HTML, которое вы можете понять. # i.stack.imgur.com/6xPdH.pnggetWidth()
ссылки на функцииself.innerHeight
Это боль в заднице . Я рекомендую пропустить ерунду и использовать jQuery , который позволяет вам просто делать
$(window).width()
.источник
Оба возвращают целые числа и не требуют jQuery. Кросс-браузер совместим.
Я часто нахожу, что jQuery возвращает недопустимые значения для width () и height ()
источник
Почему никто не упоминает matchMedia?
Не так много тестировал, но тестировал с Android-браузером по умолчанию и Android-браузером Chrome, настольным Chrome, так что, похоже, он работает хорошо.
Конечно, он не возвращает числовое значение, но возвращает логическое значение - если оно совпадает или нет, поэтому может не совсем соответствовать вопросу, но это то, что мы хотим в любом случае и, возможно, хочет автор вопроса.
источник
От W3schools и его кросс-браузерного периода до мрачных веков IE!
источник
Вот более короткая версия функции, представленной выше:
источник
Адаптированное решение для современного ответа JS of Travis:
источник
Важное дополнение к ответу Трэвиса; вам нужно поместить getWidth () в тело документа, чтобы убедиться, что ширина полосы прокрутки отсчитывается, иначе ширина полосы прокрутки браузера вычитается из getWidth (). Что я сделал ;
и вызвать переменную aWidth в любом месте впоследствии.
источник