Offset-позиция элемента в веб-разработке определяет
его положение относительно всей страницы, а не только
родительского контейнера. В библиотеке Umbrella JS работа с offset
осуществляется с помощью метода .offset(), который
позволяет как получить текущие координаты, так и установить их для
выбранных элементов.
Метод .offset() без параметров возвращает объект с
координатами top и left относительно
документа:
let position = u('#myElement').offset();
console.log(position.top, position.left);
Пояснение:
top — расстояние от верхнего края документа до верхнего
края элемента.left — расстояние от левого края документа до левого
края элемента.Возвращаемое значение всегда представляет собой числовые пиксели, что упрощает вычисления и динамическое позиционирование.
Для задания позиции элемента используется вызов
.offset() с объектом, содержащим top и/или
left:
u('#myElement').offset({ top: 100, left: 200 });
Это изменяет позицию элемента относительно
документа, сохраняя текущие размеры. Для корректной работы
элемент должен быть позиционирован через CSS
(position: relative, absolute или
fixed).
Важно:
position: static, браузер
автоматически переведет его в relative.В Umbrella JS и JavaScript в целом нужно различать несколько понятий:
offset — позиция относительно всего
документа. Используется для вычислений с учетом прокрутки
страницы.position — координаты относительно родителя с
position отличным от static. В CSS определяется через
top, left, bottom,
right.scrollTop и scrollLeft — смещения
контейнеров при прокрутке.Пример наглядного различия:
let offset = u('#myElement').offset();
let position = u('#myElement').position();
console.log('Offset:', offset.top, offset.left);
console.log('Position:', position.top, position.left);
Методы Umbrella JS обычно возвращают коллекцию элементов. При вызове
.offset() без параметров для нескольких элементов метод
возвращает координаты первого элемента коллекции.
Для установки позиции на всех элементах коллекции:
u('.boxes').offset({ top: 50, left: 100 });
Все элементы с классом .boxes будут сдвинуты в указанные
координаты.
Поскольку .offset() позволяет точно установить
координаты элемента, его удобно использовать вместе с методами анимации
Umbrella JS:
let box = u('#box');
let current = box.offset();
box.animate({ top: current.top + 100, left: current.left + 50 }, 500);
Таким образом можно создавать плавное перемещение элемента относительно страницы.
position: fixed) offset учитывает положение относительно
документа, что полезно при динамическом изменении макета.position: absolute) offset часто используют для привязки к
родительскому контейнеру через расчёт его offset.position через CSS перед установкой offset,
чтобы избежать неожиданных сдвигов.Umbrella JS работает во всех современных браузерах и корректно
вычисляет offset даже при прокрутке документа и наличии вложенных
контейнеров с позиционированием. Внутренне библиотека использует методы
getBoundingClientRect() и учет
window.scrollX/scrollY, обеспечивая точность
вычислений.
Для отладки и вычислений удобно использовать прямое логирование или сохранение координат:
u('#element').each(el => {
let pos = u(el).offset();
console.log(`Элемент: ${el.id}, top: ${pos.top}, left: ${pos.left}`);
});
Метод .each() позволяет обходить коллекцию и получать
точные позиции всех элементов.
Хотите, я подготовлю отдельный подробный раздел про сравнение offset и position с примерами визуальных сдвигов и прокрутки, чтобы закрепить понимание работы Umbrella JS?