В библиотеке ScrollMagic параметр duration определяет, на каком протяжении прокрутки активна сцена. Это один из ключевых элементов, формирующих поведение анимаций и закреплённых элементов.
Если duration равен 0, сцена срабатывает мгновенно в
точке trigger и сразу же завершается. При положительном значении сцена
остаётся активной на протяжении заданного расстояния прокрутки.
new ScrollMagic.Scene({
duration: 300
});
В данном примере сцена будет активна на протяжении 300 пикселей прокрутки.
ScrollMagic поддерживает несколько способов задания длительности:
duration: 500
Сцена длится ровно 500px скролла независимо от размеров окна или контента.
Особенности:
duration: "100%"
Значение вычисляется относительно высоты контейнера (обычно viewport).
Примеры:
"50%" — половина высоты окна"200%" — двойная высота окнаОсобенности:
duration: function () {
return window.innerHeight * 0.75;
}
Позволяет вычислять длительность в реальном времени.
Преимущества:
refresh)Если сцена связана с анимацией (например, через GSAP), длительность определяет диапазон, в котором меняется прогресс:
scene.setTween(tween);
Чем больше duration, тем медленнее развивается анимация.
scene.setPin(".element");
Duration определяет, как долго элемент остаётся закреплённым:
duration: 0 → мгновенный pin/unpinduration: 500 → элемент закреплён на 500px скроллаscene.setClassToggle(".block", "active");
Класс будет добавлен на всё время действия сцены, то есть на протяжении duration.
Часто длительность сцены привязывается к высоте другого элемента:
duration: document.querySelector(".content").offsetHeight
Применение:
Для корректной работы на разных устройствах используется динамический подход:
duration: function () {
return document.querySelector(".section").offsetHeight;
}
В сочетании с автоматическим обновлением:
controller = new ScrollMagic.Controller({
refreshInterval: 100
});
или ручным:
scene.refresh();
Длительность всегда отсчитывается от точки trigger:
new ScrollMagic.Scene({
triggerElement: "#trigger",
duration: 400
});
Схема:
[trigger] ---- 400px ---- [конец сцены]
triggerHook: 0.5
Пример:
new ScrollMagic.Scene({
triggerElement: "#block",
triggerHook: 0.5,
duration: "100%"
});
Если используется фиксированная длительность:
duration: 500
она не адаптируется под новые размеры.
Решение: использовать функцию или проценты.
Если DOM ещё не полностью отрисован:
duration: element.offsetHeight
значение может быть некорректным.
Решение:
DOMContentLoaded или
load)duration: 0
Приводит к:
duration: "100%"
duration: function () {
return document.querySelector(".text").scrollHeight;
}
duration: "200%"
Позволяет растянуть анимацию на более длинный участок прокрутки.
duration: function () {
return document.querySelector(".section").offsetHeight;
}
При последовательных сценах важно учитывать их длительность:
scene1.duration(300);
scene2.duration(500);
Если сцены накладываются:
Для визуализации используется индикатор:
scene.addIndicators();
Позволяет увидеть:
Длительность определяет «жизненный цикл» сцены при прокрутке
Выбор единиц зависит от задачи:
Длительность напрямую влияет на:
Правильный расчёт обеспечивает плавность и предсказуемость взаимодействия