При подготовке проекта на ScrollMagic для production важно учитывать несколько ключевых аспектов, которые обеспечивают корректную работу скролл-анимаций, оптимизацию загрузки и минимизацию размера бандла.
ScrollMagic предоставляет основной файл библиотеки
(ScrollMagic.js) и несколько расширений, таких как
debug.addIndicators.js для разработки и
animation.gsap.js для интеграции с GSAP. В production
версии следует использовать минифицированный основной
скрипт и подключать только необходимые плагины.
Пример подключения через HTML:
<script src="js/ScrollMagic.min.js"></script>
<script src="js/animation.gsap.min.js"></script>
Важно исключить
debug.addIndicators.jsиз production, так как он добавляет визуальные маркеры и увеличивает размер бандла.
При использовании Webpack, Rollup или Parcel рекомендуется импортировать ScrollMagic через npm-пакет:
import ScrollMagic from 'scrollmagic';
import 'scrollmagic/scrollmagic/uncompressed/plugins/animation.gsap';
Для production следует использовать минифицированные версии модулей или настроить бандлер на автоматическую минификацию:
module.exports = {
mode: 'production',
optimization: {
minimize: true
}
};
Метод addIndicators() и включение loglevel
используются только для разработки. В production их следует полностью
убрать, чтобы не перегружать DOM и не показывать
пользователю внутренние сообщения.
// Development
new ScrollMagic.Scene({
triggerElement: '#section1',
duration: 500
})
.addIndicators({ name: 'section1' })
.addTo(controller);
// Production
new ScrollMagic.Scene({
triggerElement: '#section1',
duration: 500
})
.addTo(controller);
ScrollMagic активно манипулирует DOM при скролле. В production необходимо соблюдать следующие рекомендации:
requestAnimationFrame внутри
колбэков анимаций, особенно при привязке к
onUpdate или onEnter.onUpdate (например, вычисление стилей или сложные
DOM-операции).const section = document.querySelector('#section1');
new ScrollMagic.Scene({
triggerElement: section,
duration: 500
})
.addTo(controller);
В production рекомендуется создавать сцены только для элементов, которые реально будут отображены на странице. Это снижает нагрузку на браузер и сокращает количество активных слушателей скролла.
const sections = document.querySelectorAll('.animate-section');
sections.forEach(section => {
if (section.offsetHeight > 0) { // элемент видим
new ScrollMagic.Scene({
triggerElement: section,
duration: 300
})
.addTo(controller);
}
});
Интеграция с GSAP позволяет создавать более сложные анимации без существенного увеличения кода ScrollMagic. В production важно:
Tween объектов,
объединяя их в Timeline.gsap.min.js вместо не минифицированной
версии.import { gsap } from 'gsap';
const tl = gsap.timeline();
tl.to('#box', { x: 300, duration: 1 })
.to('#box', { y: 100, duration: 0.5 });
new ScrollMagic.Scene({
triggerElement: '#trigger',
duration: 500
})
.setTween(tl)
.addTo(controller);
Для production стоит отключать все события, используемые
исключительно для дебага (onStart, onEnd,
onUpdate с console.log). Если необходимы
колбэки, стоит оптимизировать их выполнение и использовать
делегирование или throttle/debounce
для уменьшения нагрузки.
scene.on('update', () => {
// Легкая функция без дорогостоящих вычислений
});
ScrollMagic учитывает высоту viewport для триггеров. В production важно:
duration, offset) на разных экранах.const isMobile = window.innerWidth < 768;
new ScrollMagic.Scene({
triggerElement: '#section',
duration: isMobile ? 300 : 600
})
.addTo(controller);
defer или динамический импорт.<script src="js/ScrollMagic.min.js" defer></script>
Эти практики обеспечивают плавную работу скролл-анимаций, снижение нагрузки на браузер и правильное отображение контента в production сборке проекта с ScrollMagic.