ScrollMagic — мощная библиотека для управления анимациями при прокрутке страницы, однако существуют сценарии и проекты, где её использование может быть ограничено: необходимость современного подхода с более высокой производительностью, интеграции с современными фреймворками или минимизация размера бандла. Рассмотрим основные альтернативы и подходы, позволяющие реализовать схожий функционал.
GSAP ScrollTrigger — это официальное расширение для библиотеки GSAP, которое обеспечивает контроль анимаций на основе прокрутки. Он позволяет:
Пример базового использования:
gsap.registerPlugin(ScrollTrigger);
gsap.to(".box", {
x: 500,
scrollTrigger: {
trigger: ".box",
start: "top center",
end: "bottom 100px",
scrub: true,
markers: true
}
});
Преимущества перед ScrollMagic:
Locomotive Scroll сочетает плавную прокрутку и наблюдение за элементами. Отличается от ScrollMagic тем, что обеспечивает не только триггерные события, но и визуально приятное поведение скролла.
call, scroll и
enter для элементов.GSAP для сложных анимаций.Пример:
const scroll = new LocomotiveScroll({
el: document.querySelector("#main-container"),
smooth: true
});
scroll.on("scroll", (obj) => {
console.log(obj.scroll.y);
});
Особенность Locomotive Scroll — это контроль виртуальной позиции прокрутки, что позволяет создавать сложные эффекты без зависания при heavy DOM-структуре.
Lenis — современная библиотека для плавной прокрутки
с возможностью работы с событиями скролла. Она значительно облегчает
реализацию scroll-driven анимаций с небольшим кодом и
высокой производительностью.
Пример:
import Lenis from '@studio-freight/lenis'
const lenis = new Lenis({
duration: 1.2,
easing: (t) => t
})
function raf(time) {
lenis.raf(time)
requestAnimationFrame(raf)
}
requestAnimationFrame(raf)
Lenis подходит для проектов, где важна плавность и производительность, а также для сайтов с большим количеством динамических элементов.
Современный стандарт браузеров, позволяющий отслеживать видимость элементов в viewport. Это нативная альтернатива ScrollMagic для базовых задач:
Пример использования:
const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if(entry.isIntersecting){
entry.target.classList.add('animate');
}
});
}, { threshold: 0.5 });
document.querySelectorAll('.box').forEach(box => observer.observe(box));
Недостаток — отсутствие встроенного пиннинга и scrub
анимаций, которые нужно реализовывать вручную или комбинировать с
GSAP.
Для проектов на React Framer Motion предлагает
собственные механизмы scroll-based анимаций через хуки
useScroll и useTransform.
viewport-triggered
эффектами.Пример:
import { motion, useScroll, useTransform } from "framer-motion";
function ScrollBox() {
const { scrollYProgress } = useScroll();
const x = useTransform(scrollYProgress, [0, 1], [0, 500]);
return <motion.div style={{ x }} className="box" />;
}
Подходит для SPA-проектов, где ScrollMagic может быть слишком громоздким или не интегрируется с виртуальным DOM.
Использование современных альтернатив позволяет не только сократить размер бандла, но и повысить производительность, обеспечить совместимость с мобильными устройствами и легко интегрировать скролл-анимации в современные фреймворки.