Locomotive Scroll создаёт собственный объект, который управляет скроллингом страницы, перехватывает события и применяет плавные анимации. Для корректного использования библиотеки важно понимать процесс уничтожения экземпляра, особенно при динамической подгрузке контента или переходах между страницами в одностраничных приложениях (SPA).
Создание экземпляра обычно выглядит так:
import LocomotiveScroll from 'locomotive-scroll';
const scroll = new LocomotiveScroll({
el: document.querySelector('[data-scroll-container]'),
smooth: true,
multiplier: 1.0,
});
После инициализации объект scroll хранит ссылки на
контейнер, обработчики событий и анимации элементов с атрибутами
data-scroll. Для освобождения ресурсов и предотвращения
утечек памяти используется метод destroy().
Метод destroy() выполняет следующие действия:
requestAnimationFrame.Пример использования:
scroll.destroy();
После вызова destroy() экземпляр больше не работает и
повторный доступ к методам, таким как scroll.scrollTo() или
scroll.update(), приведёт к ошибкам.
1. Переход между страницами в SPA При смене контента нужно уничтожить старый экземпляр, чтобы не было конфликтов с новым контейнером:
scroll.destroy();
scroll = new LocomotiveScroll({
el: document.querySelector('[data-scroll-container]'),
smooth: true,
});
2. Динамическая подгрузка контента Если на странице
появляется новый блок с data-scroll-section, рекомендуется
вызвать destroy() и создать экземпляр заново, либо
использовать метод update() для пересчета размеров.
3. Очистка ресурсов при удалении элементов При
удалении всего скролл-контейнера из DOM необходимо вызвать
destroy(), чтобы избежать ошибок при обращении к
несуществующим элементам.
destroy() полностью удаляет экземпляр и освобождает
память.update() пересчитывает позиции и размеры элементов без
удаления слушателей и методов.Использование update() удобно при изменении размеров или
динамическом контенте, а destroy() — при полном удалении
или замене скролла.
destroy().scroll.scrollTo() или scroll.update() приведет
к ошибкам.destroy(), потом
removeChild или аналогичный метод.if (scroll) {
scroll.destroy();
scroll = null;
}
Это предотвращает повторный вызов destroy() на уже
уничтоженном экземпляре.
Некорректное уничтожение приводит к утечкам памяти и продолжению работы анимаций, даже если элементы удалены. В больших проектах это может вызвать:
Правильное использование destroy() обеспечивает
чистый и безопасный цикл жизни скролла.
Основной метод для удаления экземпляра — это destroy().
Его корректное применение гарантирует:
При сочетании с update() обеспечивается гибкое
управление жизненным циклом скролла на динамических
страницах.