jQuery предоставляет удобные методы для работы с позиционированием
элементов на странице. Среди них ключевыми являются методы
offset() и
position(), которые позволяют получать и
задавать координаты элементов относительно документа или родительского
контейнера.
offset()Метод offset() используется для получения или установки
координат элемента относительно всего документа.
Возвращаемое значение — объект с двумя свойствами: top и
left.
var coords = $('#element').offset();
console.log(coords.top, coords.left);
top — расстояние от верхнего края
документа до верхнего края элемента.left — расстояние от левого края
документа до левого края элемента.Метод учитывает любые прокрутки страницы, поэтому координаты всегда актуальны относительно видимой области документа.
$('#element').offset({ top: 100, left: 200 });
top и left.relative, absolute или
fixed.position: relative, потому что отсчёт идёт от
документа.position()Метод position() возвращает координаты элемента
относительно его ближайшего позиционированного родителя (т.е.
родителя с position: relative, absolute или
fixed).
var pos = $('#element').position();
console.log(pos.top, pos.left);
top — расстояние от верхнего края
родителя до верхнего края элемента.left — расстояние от левого края
родителя до левого края элемента.offset()| Свойство | offset() |
position() |
|---|---|---|
| Система отсчёта | Весь документ | Ближайший позиционированный родитель |
| Учитывает прокрутку | Да | Нет |
| Тип возвращаемого значения | Объект {top, left} |
Объект {top, left} |
$('#child').css('top', 50);
var pos = $('#child').position();
console.log(pos.top); // 50, если родитель с position: relative
offset() и position()Система координат:
offset() — относительно документа.position() — относительно ближайшего позиционированного
родителя.Учет прокрутки:
offset() учитывает прокрутку страницы.position() нет.Использование:
offset() удобно использовать для позиционирования
элементов на странице в абсолютных координатах.position() удобно использовать для внутренних смещений
и расчёта позиций внутри контейнера.В интерфейсной разработке часто требуется использовать оба метода вместе. Например, чтобы расположить всплывающее окно на элементе с учётом позиции родителя и прокрутки страницы:
var targetOffset = $('#target').offset();
var containerOffset = $('#container').offset();
$('#popup').css({
top: targetOffset.top - containerOffset.top,
left: targetOffset.left - containerOffset.left
});
Метод position() не устанавливает координаты напрямую,
но можно использовать css() для задания top и
left в системе координат родителя:
$('#child').css({
top: 30,
left: 50
});
position() вернёт координаты как
от документа.position: relative родителю.offset().position().relative, absolute, fixed).Методы offset() и position() —
фундаментальные инструменты jQuery для работы с координатами и
позиционированием. Их правильное понимание позволяет создавать точные и
гибкие интерфейсы, управлять размещением элементов и реализовывать
сложную анимацию и динамическое взаимодействие на странице.