scrollWidth/Height
Эти свойства – как
На рисунке выше:
-
-
Эти свойства можно использовать, чтобы «распахнуть» элемент на всю ширину/высоту.
#браузер #документ #размеры
Эти свойства – как
clientWidth/clientHeight, но также включают в себя прокрученную (которую не видно) часть элемента.На рисунке выше:
-
scrollHeight = 723 – полная внутренняя высота, включая прокрученную область.-
scrollWidth = 324 – полная внутренняя ширина, в данном случае прокрутки нет, поэтому она равна clientWidth.Эти свойства можно использовать, чтобы «распахнуть» элемент на всю ширину/высоту.
#браузер #документ #размеры
👍9🔥2
scrollLeft/scrollTop
Свойства
Следующая иллюстрация показывает значения
Другими словами, свойство
#браузер #документ #размеры
Свойства
scrollLeft/scrollTop – ширина/высота невидимой, прокрученной в данный момент, части элемента слева и сверху.Следующая иллюстрация показывает значения
scrollHeight и scrollTop для блока с вертикальной прокруткой.Другими словами, свойство
scrollTop – это «сколько уже прокручено вверх».#браузер #документ #размеры
👍7🔥2
Свойства scrollLeft/scrollTop можно изменять
В отличие от большинства свойств, которые доступны только для чтения, значения
При клике на следующий элемент будет выполняться код
Установка значения
#браузер #документ #размеры
В отличие от большинства свойств, которые доступны только для чтения, значения
scrollLeft/scrollTop можно изменять, и браузер выполнит прокрутку элемента.При клике на следующий элемент будет выполняться код
elem.scrollTop += 10. Поэтому он будет прокручиваться на 10px вниз.Установка значения
scrollTop на 0 или Infinity прокрутит элемент в самый верх/низ соответственно.#браузер #документ #размеры
👍7🔥1
Не window.innerWidth/Height
Браузеры также поддерживают свойства
Если есть полоса прокрутки, и она занимает какое-то место, то свойства
А
Если полоса прокрутки занимает некоторое место, то эти две строки выведут разные значения.
#браузер #документ #размеры
Браузеры также поддерживают свойства
window.innerWidth/innerHeight. Вроде бы, похоже на то, что нам нужно. Почему же не использовать их?Если есть полоса прокрутки, и она занимает какое-то место, то свойства
clientWidth/clientHeight указывают на ширину/высоту документа без неё (за её вычетом). Иными словами, они возвращают высоту/ширину видимой части документа, доступной для содержимого.А
window.innerWidth/innerHeight включают в себя полосу прокрутки.Если полоса прокрутки занимает некоторое место, то эти две строки выведут разные значения.
#браузер #документ #размеры
👍8🔥1
Ширина/высота документа
Теоретически, т.к. корневым элементом документа является
Но именно на этом элементе, для страницы в целом, эти свойства работают не так, как предполагается. В Chrome/Safari/Opera, если нет прокрутки, то
Чтобы надёжно получить полную высоту документа, нам следует взять максимальное из этих свойств.
#браузер #документ #размеры
Теоретически, т.к. корневым элементом документа является
documentElement, и он включает в себя всё содержимое, мы можем получить полный размер документа как documentElement.scrollWidth/scrollHeight.Но именно на этом элементе, для страницы в целом, эти свойства работают не так, как предполагается. В Chrome/Safari/Opera, если нет прокрутки, то
documentElement.scrollHeight может быть даже меньше, чем documentElement.clientHeight! С точки зрения элемента это невозможная ситуация.Чтобы надёжно получить полную высоту документа, нам следует взять максимальное из этих свойств.
#браузер #документ #размеры
👍4❤1🔥1
Получение текущей прокрутки
Обычные элементы хранят текущее состояние прокрутки в
Что же со страницей? В большинстве браузеров мы можем обратиться к
К счастью, нам совсем не обязательно запоминать эти особенности, потому что текущую прокрутку можно прочитать из свойств
Эти свойства доступны только для чтения.
#браузер #документ #размеры
Обычные элементы хранят текущее состояние прокрутки в
elem.scrollLeft/scrollTop.Что же со страницей? В большинстве браузеров мы можем обратиться к
documentElement.scrollLeft/Top, за исключением основанных на старом WebKit (Safari), где есть ошибка (5991), и там нужно использовать document.body вместо document.documentElement.К счастью, нам совсем не обязательно запоминать эти особенности, потому что текущую прокрутку можно прочитать из свойств
window.pageXOffset/pageYOffsetЭти свойства доступны только для чтения.
#браузер #документ #размеры
👍3🔥1
Запретить прокрутку
Иногда нам нужно сделать документ «непрокручиваемым». Например, при показе большого диалогового окна над документом – чтобы посетитель мог прокручивать это окно, но не документ.
Чтобы запретить прокрутку страницы, достаточно установить
Аналогичным образом мы можем «заморозить» прокрутку для других элементов, а не только для
Недостатком этого способа является то, что сама полоса прокрутки исчезает. Если она занимала некоторую ширину, то теперь эта ширина освободится, и содержимое страницы расширится, текст «прыгнет», заняв освободившееся место.
Это выглядит немного странно, но это можно обойти, если сравнить
#браузер #документ #размеры
Иногда нам нужно сделать документ «непрокручиваемым». Например, при показе большого диалогового окна над документом – чтобы посетитель мог прокручивать это окно, но не документ.
Чтобы запретить прокрутку страницы, достаточно установить
document.body.style.overflow = "hidden".Аналогичным образом мы можем «заморозить» прокрутку для других элементов, а не только для
document.body.Недостатком этого способа является то, что сама полоса прокрутки исчезает. Если она занимала некоторую ширину, то теперь эта ширина освободится, и содержимое страницы расширится, текст «прыгнет», заняв освободившееся место.
Это выглядит немного странно, но это можно обойти, если сравнить
clientWidth до и после остановки, и если clientWidth увеличится (значит полоса прокрутки исчезла), то добавить padding в document.body вместо полосы прокрутки, чтобы оставить ширину содержимого прежней.#браузер #документ #размеры
👍10🔥5
Нравится ли вам оформление и содержание канала?
Это анонимный опрос с целью улучшения контента.
Это анонимный опрос с целью улучшения контента.
Anonymous Poll
80%
Да, все нравится
11%
Нравится содержание, но не нравится оформление
6%
Нравится оформление, но не нравится содержание
3%
Ничего не нравится
👍5🔥4❤2
Element.getBoundingClientRect()
Метод
Результатом является самый маленький прямоугольник, в котором содержится весь элемент с read-only
#браузер #документ #координаты
Метод
Element.getBoundingClientRect() возвращает размер элемента и его позицию относительно viewport (часть страницы, показанная на экране, и которую мы видим).Результатом является самый маленький прямоугольник, в котором содержится весь элемент с read-only
left, top, right, bottom, x, y, width и height свойствами, описывающие это в пикселях. Все свойства, кроме width и height, являются относительными к верхнему левому углу viewport-а.#браузер #документ #координаты
👍3🔥2❤1
Зачем вообще нужны зависимые свойства? Для чего существуют top/left, если есть x/y?
С математической точки зрения, прямоугольник однозначно задаётся начальной точкой
Так что дополнительные зависимые свойства существуют лишь для удобства.
Что же касается
То есть, отрицательные значения
#браузер #документ #координаты
С математической точки зрения, прямоугольник однозначно задаётся начальной точкой
(x,y) и вектором направления (width,height).Так что дополнительные зависимые свойства существуют лишь для удобства.
Что же касается
top/left, то они на самом деле не всегда равны x/y. Технически, значения width/height могут быть отрицательными. Это позволяет задать «направленный» прямоугольник, например, для выделения мышью с отмеченным началом и концом.То есть, отрицательные значения
width/height означают, что прямоугольник «растет» влево-вверх из правого угла.#браузер #документ #координаты
👍4🔥2❤1
elementFromPoint(x, y)
Вызов
Например, код выше выделяет с помощью стилей и выводит имя тега элемента, который сейчас в центре окна браузера.
#браузер #документ #координаты
Вызов
document.elementFromPoint(x, y) возвращает самый глубоко вложенный элемент в окне, находящийся по координатам (x, y).Например, код выше выделяет с помощью стилей и выводит имя тега элемента, который сейчас в центре окна браузера.
#браузер #документ #координаты
👍5🔥2
Применение для fixed позиционирования
Чаще всего нам нужны координаты для позиционирования чего-либо.
Чтобы показать что-то около нужного элемента, мы можем вызвать
Например, функция
#браузер #документ #координаты
Чаще всего нам нужны координаты для позиционирования чего-либо.
Чтобы показать что-то около нужного элемента, мы можем вызвать
getBoundingClientRect, чтобы получить его координаты элемента, а затем использовать CSS-свойство position вместе с left/top (или right/bottom).Например, функция
createMessageUnder(elem, html) выше показывает сообщение под элементом elem.#браузер #документ #координаты
👍8🔥3
Введение в браузерные события
Событие – это сигнал от браузера о том, что что-то произошло. Все DOM-узлы подают такие сигналы (хотя события бывают и не только в DOM).
Вот список самых часто используемых DOM-событий, пока просто для ознакомления:
События мыши:
События на элементах управления:
Клавиатурные события:
События документа:
CSS events:
Существует множество других событий. О них в следующих постах.
#браузер #документ #события
Событие – это сигнал от браузера о том, что что-то произошло. Все DOM-узлы подают такие сигналы (хотя события бывают и не только в DOM).
Вот список самых часто используемых DOM-событий, пока просто для ознакомления:
События мыши:
click – происходит, когда кликнули на элемент левой кнопкой мыши.contextmenu – происходит, когда кликнули на элемент правой кнопкой мыши.mouseover / mouseout – когда мышь наводится на / покидает элемент.mousedown / mouseup – когда нажали / отжали кнопку мыши на элементе.mousemove – при движении мыши.События на элементах управления:
submit – пользователь отправил форму <form>.focus – пользователь фокусируется на элементе.Клавиатурные события:
keydown и keyup – когда пользователь нажимает / отпускает клавишу.События документа:
DOMContentLoaded – когда HTML загружен и обработан.CSS events:
transitionend – когда CSS-анимация завершена.Существует множество других событий. О них в следующих постах.
#браузер #документ #события
👍17🔥5
Обработчики событий
Событию можно назначить обработчик, то есть функцию, которая сработает, как только событие произошло.
Именно благодаря обработчикам JavaScript-код может реагировать на действия пользователя.
Есть несколько способов назначить событию обработчик. Мы их рассмотрим, начиная с самого простого.
#браузер #документ #события
Событию можно назначить обработчик, то есть функцию, которая сработает, как только событие произошло.
Именно благодаря обработчикам JavaScript-код может реагировать на действия пользователя.
Есть несколько способов назначить событию обработчик. Мы их рассмотрим, начиная с самого простого.
#браузер #документ #события
👍14🔥2❤1
Использование свойства DOM-объекта
Можно назначать обработчик, используя свойство DOM-элемента
К примеру,
Если обработчик задан через атрибут, то браузер читает HTML-разметку, создаёт новую функцию из содержимого атрибута и записывает в свойство.
#браузер #документ #события
Можно назначать обработчик, используя свойство DOM-элемента
on<событие>.К примеру,
elem.onclick.Если обработчик задан через атрибут, то браузер читает HTML-разметку, создаёт новую функцию из содержимого атрибута и записывает в свойство.
#браузер #документ #события
👍6🔥3
Обработчик в атрибуте и свойстве
Обработчик всегда хранится в свойстве DOM-объекта, а атрибут – лишь один из способов его инициализации.
Так как у элемента DOM может быть только одно свойство с именем
P.S. Два примера кода на картинке работают одинаково.
#браузер #документ #события
Обработчик всегда хранится в свойстве DOM-объекта, а атрибут – лишь один из способов его инициализации.
Так как у элемента DOM может быть только одно свойство с именем
onclick, то назначить более одного обработчика так нельзя.P.S. Два примера кода на картинке работают одинаково.
#браузер #документ #события
👍7🔥3