Метод update() в библиотеке Locomotive
Scroll предназначен для синхронизации состояния скролла с
текущей структурой DOM. Он необходим в случаях, когда в документ
динамически добавляются, удаляются или изменяются элементы, влияющие на
размеры контента и положение прокрутки. Без вызова этого метода
библиотека может работать некорректно: элементы с атрибутами
data-scroll, data-scroll-speed или
data-scroll-sticky могут неправильно позиционироваться, а
анимации могут срабатывать не в том месте.
scroll.update();
Метод вызывается без аргументов и не возвращает значения. Его задача — пересчитать все позиции и размеры элементов, участвующих в скролле, и обновить внутренние кэши Locomotive Scroll.
update()Добавление новых элементов в DOM Если после
инициализации скролла в контейнер добавляются новые блоки с атрибутами
data-scroll, их позиции не будут учтены автоматически.
Вызов update() позволяет библиотеке «узнать» о новых
элементах.
Удаление или изменение размеров элементов Изменение контента может привести к смещению других элементов. Метод пересчитывает позиции, чтобы прокрутка оставалась точной.
Динамическая загрузка контента При использовании
AJAX или других методов подгрузки элементов на страницу метод
update() позволяет корректно интегрировать новые блоки в
текущий скролл.
Изменение размеров окна или контейнера Хотя
Locomotive Scroll автоматически отслеживает ресайз, иногда после сложных
манипуляций с DOM требуется явный вызов update() для
точного расчета новых координат.
update()Locomotive Scroll хранит внутренние кэши размеров и координат всех
элементов с атрибутами скролла. Когда вызывается update(),
происходит следующее:
data-scroll, data-scroll-speed,
data-scroll-sticky собираются заново.scroll или call, они
корректно реагируют на новую структуру DOM.Пример 1: добавление элемента через JavaScript
const newSection = document.createElement('section');
newSection.setAttribute('data-scroll', '');
newSection.textContent = "Новая секция";
document.querySelector('#scroll-container').appendChild(newSection);
// Обновление Locomotive Scroll
scroll.update();
Пример 2: удаление элемента
const sectionToRemove = document.querySelector('.old-section');
sectionToRemove.remove();
// Пересчет позиций после удаления
scroll.update();
Пример 3: изменение размеров блока
const resizableBox = document.querySelector('.resizable');
resizableBox.style.height = '500px';
// Обновление координат элементов
scroll.update();
Не злоупотреблять частым вызовом Частый вызов
update() на больших страницах может снижать
производительность. Лучше объединять несколько изменений DOM и вызывать
метод один раз после всех изменений.
Использовать после асинхронных операций Если
элементы подгружаются динамически через fetch, AJAX или WebSocket,
update() следует вызывать после того, как новые элементы
полностью вставлены в DOM.
Связь с методом refresh() Метод
refresh() также обновляет позиции, но кроме этого
инициирует ресайз контейнера и пересчет всех внутренних размеров. Для
простых изменений DOM достаточно update().
Влияние на анимации Элементы с анимацией,
привязанной к прокрутке (data-scroll-call,
data-scroll-class), начинают корректно срабатывать только
после пересчета. Это особенно важно для страниц с ленивой загрузкой
изображений.
Метод update() тесно связан с событиями Locomotive
Scroll:
scroll.scrollTo() — после вызова update()
можно корректно использовать прокрутку к новым элементам.scroll.on('scroll', callback) — позиции элементов будут
точными только после обновления.scroll.update() можно безопасно вызывать несколько раз
подряд; библиотека корректно пересчитает позиции без дублирования.Метод update() является ключевым инструментом для
поддержки динамических интерфейсов при использовании Locomotive
Scroll, обеспечивая точность анимаций и позиционирования
элементов даже в условиях активно изменяемого DOM.