Метод setPin является ключевым инструментом библиотеки
ScrollMagic, позволяя закреплять элементы на странице
при прокрутке и создавать эффект «липкой» позиции. Он применяется к
объекту сцены (Scene) и управляет поведением DOM-элемента в
процессе скролла.
var scene = new ScrollMagic.Scene({
triggerElement: "#trigger", // Элемент, с которого начинается сцена
duration: 500, // Длительность закрепления в пикселях
triggerHook: 0 // Положение триггера на экране (0 — верх)
})
.setPin("#pinElement") // Элемент, который закрепляется
.addTo(controller);
triggerElement — элемент, при
попадании которого в область видимости начинается сцена.duration — продолжительность эффекта
закрепления. Если не указано, элемент закрепляется на время появления
триггера.triggerHook — положение на экране, при
котором срабатывает триггер. Значение от 0 (верх) до 1 (низ).setPin(element, settings) — закрепляет
переданный элемент. Вторым параметром можно передать объект с
дополнительными настройками.setPinМетод принимает два аргумента:
element — DOM-элемент или селектор,
который нужно закрепить.settings — необязательный объект с
настройками:{
pushFollowers: true, // Элемент будет «толкать» последующие элементы
spacerClass: "pin-spacer" // CSS-класс для создаваемого контейнера-обертки
}
pushFollowers (по умолчанию
true) — если true, последующие элементы
страницы будут сдвигаться вниз, чтобы не перекрываться закрепленным
элементом. Если false, закрепленный элемент будет
накладываться поверх контента.spacerClass — позволяет задать
кастомный класс для создаваемого spacer, который
ScrollMagic вставляет для сохранения структуры документа при
закреплении.Продолжительность (duration) определяет, на какое
расстояние по скроллу элемент будет оставаться закрепленным. Она может
задаваться как:
duration: 500 — 500px
прокрутки;duration: "50%" — половина высоты окна;duration: function () {
return document.querySelector("#section").offsetHeight;
}
Такой подход позволяет адаптировать закрепление под содержимое, которое может меняться по высоте.
var controller = new ScrollMagic.Controller();
var scene1 = new ScrollMagic.Scene({
triggerElement: "#trigger1",
duration: 300
})
.setPin("#pin1")
.addTo(controller);
var scene2 = new ScrollMagic.Scene({
triggerElement: "#trigger2",
duration: 500
})
.setPin("#pin2", { pushFollowers: false })
.addTo(controller);
Здесь два элемента закрепляются независимо друг от друга. Для второго
элемента установлено pushFollowers: false, поэтому он не
сдвигает следующий контент, а накладывается сверху.
setPin ScrollMagic
создаёт обёртку (spacer) для сохранения исходного потока документа.
Визуально это почти незаметно, но важно учитывать при работе с кастомной
версткой.TweenMax или GSAP.
Анимации будут выполняться относительно позиции элемента в сцене.Закрепление можно удалить с помощью метода
.removePin():
scene.removePin(true); // true — удаляет spacer из DOM
Это полезно, если требуется условное закрепление в зависимости от состояния страницы или устройства.
Метод setPin тесно связан с triggerElement
и triggerHook. Понимание этих параметров позволяет
создавать сложные эффекты:
triggerHook: 0 — закрепление начинается, когда верх
элемента достигает верха окна.triggerHook: 0.5 — закрепление начинается при попадании
элемента в середину окна.triggerHook: 1 — закрепление начинается, когда нижняя
граница элемента видна внизу окна.Комбинация duration и triggerHook позволяет
управлять точной позицией и временем закрепления.
Метод setPin — основной механизм ScrollMagic для
создания sticky-панелей, параллакс-эффектов и
интерактивных анимаций, управляемых скроллом. Он гибко настраивается
через параметры сцены и настройки pinned-элемента, обеспечивая широкие
возможности по взаимодействию с DOM.