Как отследить изменение ширины экрана js
Для отслеживания размеров окна браузера достаточно привязаться к событию resize , например: Исходный HTML файл:
type="text" id="text">
Добавим в раздел sсript код, который отслеживает изменения размеров окна.
type="text/javascript"> windоw.addEventListener('resize',(e) => < cоnst width= document.body.clientWidth; cоnst getInput = document.getElementById("text"); gеtInput.value = width; >);
Если воспроизвести пример, то можно видеть значение ширины экрана браузера в значении элемента input.
Размеры и прокрутка окна
Как узнать ширину и высоту окна браузера? Как получить полную ширину и высоту документа, включая прокрученную часть? Как прокрутить страницу с помощью JavaScript?
Для большинства таких запросов мы можем использовать корневой элемент документа document.documentElement , который соответствует тегу . Однако есть дополнительные методы и особенности, которые необходимо учитывать.
Ширина/высота окна
Чтобы получить ширину/высоту окна, можно взять свойства clientWidth/clientHeight из document.documentElement :
Например, эта кнопка показывает высоту вашего окна:
Не window.innerWidth/Height
Браузеры также поддерживают свойства window.innerWidth/innerHeight . Вроде бы, похоже на то, что нам нужно. Почему же не использовать их?
Если есть полоса прокрутки, и она занимает какое-то место, то свойства clientWidth/clientHeight указывают на ширину/высоту документа без неё (за её вычетом). Иными словами, они возвращают высоту/ширину видимой части документа, доступной для содержимого.
А window.innerWidth/innerHeight включают в себя полосу прокрутки.
Если полоса прокрутки занимает некоторое место, то эти две строки выведут разные значения:
alert( window.innerWidth ); // полная ширина окна alert( document.documentElement.clientWidth ); // ширина окна за вычетом полосы прокрутки
В большинстве случаев нам нужна доступная ширина окна: для рисования или позиционирования. Полоса прокрутки «отъедает» её часть. Поэтому следует использовать documentElement.clientHeight/Width .
DOCTYPE – это важно
Обратите внимание, что геометрические свойства верхнего уровня могут работать немного иначе, если в HTML нет . Возможны странности.
В современном HTML мы всегда должны указывать DOCTYPE .
Ширина/высота документа
Теоретически, т.к. корневым элементом документа является documentElement , и он включает в себя всё содержимое, мы можем получить полный размер документа как documentElement.scrollWidth/scrollHeight .
Но именно на этом элементе, для страницы в целом, эти свойства работают не так, как предполагается. В Chrome/Safari/Opera, если нет прокрутки, то documentElement.scrollHeight может быть даже меньше, чем documentElement.clientHeight ! С точки зрения элемента это невозможная ситуация.
Чтобы надёжно получить полную высоту документа, нам следует взять максимальное из этих свойств:
let scrollHeight = Math.max( document.body.scrollHeight, document.documentElement.scrollHeight, document.body.offsetHeight, document.documentElement.offsetHeight, document.body.clientHeight, document.documentElement.clientHeight ); alert('Полная высота документа с прокручиваемой частью: ' + scrollHeight);
Почему? Лучше не спрашивайте. Эти несоответствия идут с древних времён. Глубокой логики здесь нет.
Получение текущей прокрутки
Обычные элементы хранят текущее состояние прокрутки в elem.scrollLeft/scrollTop .
Что же со страницей? В большинстве браузеров мы можем обратиться к documentElement.scrollLeft/Top , за исключением основанных на старом WebKit (Safari), где есть ошибка (5991), и там нужно использовать document.body вместо document.documentElement .
К счастью, нам совсем не обязательно запоминать эти особенности, потому что текущую прокрутку можно прочитать из свойств window.pageXOffset/pageYOffset :
alert('Текущая прокрутка сверху: ' + window.pageYOffset); alert('Текущая прокрутка слева: ' + window.pageXOffset);
Эти свойства доступны только для чтения.
В качестве свойств объекта window также доступны scrollX и scrollY
По историческим причинам существует два аналога window.pageXOffset и window.pageYOffset :
- window.pageXOffset – то же самое, что и window.scrollX .
- window.pageYOffset – то же самое, что и window.scrollY .
Прокрутка: scrollTo, scrollBy, scrollIntoView
Для прокрутки страницы из JavaScript её DOM должен быть полностью построен.
Например, если мы попытаемся прокрутить страницу из скрипта, подключенного в , это не сработает.
Обычные элементы можно прокручивать, изменяя scrollTop/scrollLeft .
Мы можем сделать то же самое для страницы в целом, используя document.documentElement.scrollTop/Left (кроме основанных на старом WebKit (Safari), где, как сказано выше, document.body.scrollTop/Left ).
Есть и другие способы, в которых подобных несовместимостей нет: специальные методы window.scrollBy(x,y) и window.scrollTo(pageX,pageY).
- Метод scrollBy(x,y) прокручивает страницу относительно её текущего положения. Например, scrollBy(0,10) прокручивает страницу на 10px вниз. Кнопка ниже демонстрирует это: window.scrollBy(0,10)
- Метод scrollTo(pageX,pageY) прокручивает страницу на абсолютные координаты (pageX,pageY) . То есть, чтобы левый-верхний угол видимой части страницы имел данные координаты относительно левого верхнего угла документа. Это всё равно, что поставить scrollLeft/scrollTop . Для прокрутки в самое начало мы можем использовать scrollTo(0,0) . window.scrollTo(0,0)
В обоих методах вместо координат также может использоваться объект options , как аргумент:
window.scrollTo(options); window.scrollBy(options);
options поддерживает три свойства:
window.scrollTo(< top: 100, left: 0, behavior: "smooth" >);
- top – то же самое, что y / pageY
- left – то же самое, что x / pageX
- behavior – определяет, каким образом будет прокручиваться страница:
- «smooth» – плавно (не поддерживается в IE и в старых версиях Safari)
- «instant» – мгновенно
- «auto» – определяется браузером (зависит от CSS-свойства scroll-behavior)
Демонстрация плавной прокрутки страницы:
scrollIntoView
Для полноты картины давайте рассмотрим ещё один метод: elem.scrollIntoView(top).
Вызов elem.scrollIntoView(top) прокручивает страницу, чтобы elem оказался вверху. У него есть один аргумент:
- если top=true (по умолчанию), то страница будет прокручена, чтобы elem появился в верхней части окна. Верхний край элемента совмещён с верхней частью окна.
- если top=false , то страница будет прокручена, чтобы elem появился внизу. Нижний край элемента будет совмещён с нижним краем окна.
Кнопка ниже прокрутит страницу так, что она сама окажется вверху:
А следующая кнопка прокрутит страницу так, что она сама окажется внизу
Как и scrollTo / scrollBy , scrollIntoView также принимает объект options как аргумент (он немного отличается):
this.scrollIntoView(options).options поддерживает три свойства:
this.scrollIntoView(< behavior: "smooth", block: "end", inline: "nearest" >);- behavior – анимация прокрутки ( smooth , instant , auto )
- block – вертикальное выравнивание ( start , center , end , nearest ). Значение по умолчанию: start
- inline – горизонтальное выравнивание ( start , center , end , nearest ). Значение по умолчанию: nearest
Запретить прокрутку
Иногда нам нужно сделать документ «непрокручиваемым». Например, при показе большого диалогового окна над документом – чтобы посетитель мог прокручивать это окно, но не документ.
Чтобы запретить прокрутку страницы, достаточно установить document.body.style.overflow = «hidden» .
Первая кнопка останавливает прокрутку, вторая возобновляет её.
Аналогичным образом мы можем «заморозить» прокрутку для других элементов, а не только для document.body .
Недостатком этого способа является то, что сама полоса прокрутки исчезает. Если она занимала некоторую ширину, то теперь эта ширина освободится, и содержимое страницы расширится, текст «прыгнет», заняв освободившееся место.
Это выглядит немного странно, но это можно обойти, если сравнить clientWidth до и после остановки, и если clientWidth увеличится (значит полоса прокрутки исчезла), то добавить padding в document.body вместо полосы прокрутки, чтобы оставить ширину содержимого прежней.
Итого
- Ширина/высота видимой части документа (ширина/высота области содержимого): document.documentElement.clientWidth/Height
- Ширина/высота всего документа со всей прокручиваемой областью страницы:
let scrollHeight = Math.max( document.body.scrollHeight, document.documentElement.scrollHeight, document.body.offsetHeight, document.documentElement.offsetHeight, document.body.clientHeight, document.documentElement.clientHeight );- Прокрутку окна можно получить так: window.pageYOffset/pageXOffset .
- Изменить текущую прокрутку:
- window.scrollTo(pageX,pageY) – абсолютные координаты,
- window.scrollBy(x,y) – прокрутка относительно текущего места,
- elem.scrollIntoView(top) – прокрутить страницу так, чтобы сделать elem видимым (выровнять относительно верхней/нижней части окна).
Как определить размер экрана пользователя с помощью JavaScript
Узнайте, как определить размеры экрана пользователя с помощью JavaScript для адаптивного дизайна и улучшения пользовательского опыта.
Алексей Кодов
Автор статьи
2 июня 2023 в 11:29Определение размера экрана пользователя является важной задачей в веб-разработке, так как это позволяет адаптировать контент и дизайн сайта под разные устройства, что улучшает пользовательский опыт. В этой статье мы рассмотрим, как использовать JavaScript для получения размеров экрана пользователя.
Получение размеров экрана с помощью window.innerWidth и window.innerHeight
Для того, чтобы определить размеры экрана пользователя, можно воспользоваться свойствами window.innerWidth и window.innerHeight . Они представляют собой ширину и высоту окна браузера соответственно (в пикселях), включая полосу прокрутки (если она есть).
const width = window.innerWidth; const height = window.innerHeight; console.log("Ширина экрана: " + width + "px"); console.log("Высота экрана: " + height + "px");Этот способ является наиболее простым и универсальным, так как он работает во всех современных браузерах.
Веб-разработчик: новая работа через 9 месяцев
Получится, даже если у вас нет опыта в IT
Получение размеров экрана с помощью screen.width и screen.height
Также можно использовать свойства screen.width и screen.height для определения размеров экрана. Они представляют собой ширину и высоту экрана пользователя (в пикселях), но не учитывают полосу прокрутки.
const screenWidth = screen.width; const screenHeight = screen.height; console.log("Ширина экрана: " + screenWidth + "px"); console.log("Высота экрана: " + screenHeight + "px");Отметим, что этот метод может не подходить для определения размеров окна браузера, так как он учитывает только размеры экрана устройства. Однако он пригодится, если вам нужно знать размеры всего экрана.
Заключение
Теперь вы знаете, как определить размеры экрана пользователя с помощью JavaScript. В зависимости от конкретной задачи можно использовать разные методы: window.innerWidth и window.innerHeight для определения размеров окна браузера или screen.width и screen.height для получения размеров всего экрана. Удачи в вашей веб-разработке!
Получение размеров экрана, текущей веб-страницы и окна браузера в JavaScript

Веб-разработка зачастую требует получения информации о размерах окна браузера, всего экрана и текущей веб-страницы. Это может быть полезно для определения разрешения экрана, для адаптивного дизайна, для создания модальных окон или слайдеров, для работы с прокруткой страницы и других задач.
Получение размеров окна браузера
Размеры окна браузера можно получить с помощью свойств innerWidth и innerHeight объекта window . Они содержат ширину и высоту области просмотра, включая полосы прокрутки.
let windowWidth = window.innerWidth; let windowHeight = window.innerHeight;
Получение размеров экрана
Для получения размеров всего экрана, а не только окна браузера, используются свойства screen.width и screen.height .
let screenWidth = screen.width; let screenHeight = screen.height;
Получение размеров веб-страницы
Размеры веб-страницы, отображаемой в текущем окне браузера, можно получить с помощью свойств clientWidth и clientHeight объекта document.documentElement .
let pageWidth = document.documentElement.clientWidth; let pageHeight = document.documentElement.clientHeight;
Получение текущей позиции прокрутки страницы
Позиция прокрутки страницы в горизонтальном и вертикальном направлениях может быть получена с помощью свойств pageXOffset и pageYOffset объекта window .
let pageX = window.pageXOffset; let pageY = window.pageYOffset;
Получение позиции страницы относительно экрана
Позиция страницы относительно экрана может быть получена с помощью свойств screenX и screenY объекта window .
let screenX = window.screenX; let screenY = window.screenY;
Все указанные свойства работают во всех основных браузерах. Они позволяют получить всю необходимую информацию о размерах и позиции экрана, окна браузера и веб-страницы.
