Snap-эффект в библиотеке ScrollMagic используется для автоматического “прилипания” скролла к определённым точкам страницы. Обычно это удобно при создании лендингов с секциями или эффектами параллакса, где после завершения прокрутки скролл автоматически фиксируется на ближайшей секции. Это создаёт ощущение плавной и контролируемой навигации.
В ScrollMagic snap реализуется через комбинацию
Controller, Scene и параметров
duration и triggerHook, а также с помощью
плагина scrollTo или вспомогательных библиотек для анимации
прокрутки.
var controller = new ScrollMagic.Controller({
vertical: true,
globalSceneOptions: {
triggerHook: 0
}
});
0
соответствует верхней границе окна.Snap-эффект будет работать корректно, если triggerHook
установлен на начало или конец секции, чтобы прокрутка фиксировалась на
нужной позиции.
var scene = new ScrollMagic.Scene({
triggerElement: "#section1",
duration: "100%",
offset: 0
})
.setPin("#section1")
.addTo(controller);
triggerElement.Snap-эффект обычно используется вместе с setPin, чтобы
после прокрутки скролл “прилипал” к следующей секции.
Для корректного snap-эффекта нужно использовать функцию прокрутки
scrollTo. В ScrollMagic она интегрируется через
Controller:
controller.scrollTo(function(target) {
TweenMax.to(window, 0.5, {
scrollTo: {y: target},
ease: Power2.easeOut
});
});
y, к
которой нужно прокрутить.После этого можно программно прокручивать страницу к любой секции, обеспечивая snap-эффект.
Snap можно реализовать на событиях end сцены, чтобы
после завершения прокрутки страница автоматически фиксировалась:
scene.on("end", function(event) {
var scrollPos = window.scrollY;
var sectionOffset = event.target.triggerElement().offsetTop;
controller.scrollTo(sectionOffset);
});
Такая реализация обеспечивает точное “прилипание” к секции после завершения прокрутки пользователем.
Для страниц с множеством секций можно создать массив элементов и динамически навешивать сцены:
var sections = document.querySelectorAll(".section");
sections.forEach(function(section) {
new ScrollMagic.Scene({
triggerElement: section,
duration: "100%"
})
.setPin(section)
.addTo(controller)
.on("end", function() {
controller.scrollTo(section.offsetTop);
});
});
duration может замедлять snap-эффект.TweenMax или GSAP обеспечивает более
естественный переход между секциями.Snap-эффект в ScrollMagic — мощный инструмент для создания лендингов и интерактивных интерфейсов с фиксированными секциями, позволяющий контролировать скролл и обеспечивать плавный переход между элементами страницы.