Метод update() является ключевым инструментом для
управления пересчётом и синхронизацией прокрутки при динамическом
изменении контента страницы. В Locomotive Scroll он используется для
того, чтобы библиотека корректно отслеживала размеры элементов, позиции
и обновляла внутренние расчёты виртуальной прокрутки после добавления,
удаления или изменения контента.
scroll.update();
Где scroll — это экземпляр Locomotive Scroll, созданный
с помощью:
const scroll = new LocomotiveScroll({
el: document.querySelector('[data-scroll-container]'),
smooth: true
});
Вызов update() инициирует пересчёт размеров всех
элементов с атрибутами data-scroll и
data-scroll-section, а также обновляет текущую
позицию прокрутки. Это особенно важно для сайтов с динамическим
контентом: подгружаемыми изображениями, изменяющимися блоками или
AJAX-запросами.
update()Основные сценарии применения метода:
Динамическая загрузка контента Если после
загрузки страницы добавляются новые блоки через JavaScript (например,
ленивые изображения или элементы галереи), необходимо вызвать
update(), чтобы Locomotive Scroll корректно их учёл при
прокрутке.
const newContent = document.createElement('div');
newContent.setAttribute('data-scroll', '');
document.querySelector('[data-scroll-container]').appendChild(newContent);
scroll.update();Изменение размеров элементов При анимациях,
раскрывающихся блоках или изменении текста высота элементов меняется.
Без вызова update() прокрутка будет некорректной, поскольку
библиотека использует старые размеры для расчёта позиций.
Переключение видимости элементов При
скрытии/показе блоков через CSS (display: none →
display: block) метод гарантирует, что новые позиции будут
пересчитаны, а скролл останется плавным и точным.
Изменение структуры DOM Удаление или
перестановка элементов также требует пересчёта координат. Любые
изменения DOM, которые влияют на высоту контента, должны сопровождаться
вызовом update().
Метод update() выполняет следующие операции:
data-scroll-section.data-scroll получают новые координаты, что важно для
корректной работы эффекта параллакса или анимаций на скролле.scroll.instance.scroll.y.scrollTo() и событиямиПосле вызова update() можно безопасно использовать
методы:
scroll.scrollTo('#target-element'); // прокрутка к элементу с учётом обновлённых координат
Также все события, привязанные через
scroll.on('scroll', callback) или
scroll.on('call', callback), будут работать корректно с
обновлёнными позициями элементов.
update() может снижать
производительность: не вызывать его в каждом кадре анимации, а
только после завершения значимых изменений DOM.<img> стоит использовать событие
load, чтобы вызвать update() только после
того, как элементы полностью загрузились.update()
для точного расчёта координат.Пример корректного использования с изображениями:
const images = document.querySelectorAll('img');
let loadedCount = 0;
images.forEach(img => {
img.addEventListener('load', () => {
loadedCount++;
if (loadedCount === images.length) {
scroll.update();
}
});
});
Метод update() обеспечивает гибкость и
точность Locomotive Scroll при работе с динамическим контентом.
Он гарантирует, что любые изменения в DOM будут правильно учтены, а
прокрутка останется плавной и предсказуемой.