Ошибка: сцена не запускается, а события не срабатывают. Причины:
triggerElement).Решения:
document.addEventListener('DOMContentLoaded', function() {
var controller = new ScrollMagic.Controller();
new ScrollMagic.Scene({
triggerElement: '#section1'
})
.setClassToggle('#section1', 'visible')
.addTo(controller);
});
document.querySelector('#section1') перед созданием сцены
помогает убедиться, что элемент существует.Ошибка: анимация не запускается или запускается некорректно.
Причины:
Решения:
if (typeof gsap !== 'undefined') {
gsap.to("#box", { duration: 1, x: 100 });
}
setTween внутри сцены:var controller = new ScrollMagic.Controller();
var tween = gsap.to("#box", { x: 200, duration: 2 });
new ScrollMagic.Scene({
triggerElement: "#trigger",
duration: 300
})
.setTween(tween)
.addTo(controller);
Timeline:var timeline = gsap.timeline();
timeline.to("#box1", { x: 100 })
.to("#box2", { y: 50 }, "-=1"); // запускается на 1 секунду раньше
Ошибка: события enter,
leave или update не срабатывают при
скролле.
Причины:
window, а по контейнеру с
overflow: scroll.duration) равна нулю, и событие
enter мгновенно срабатывает и уходит.Решения:
var controller = new ScrollMagic.Controller({
vertical: true,
container: "#scrollContainer"
});
new ScrollMagic.Scene({
triggerElement: "#trigger",
duration: 500
});
Ошибка: сцены работают на одном разрешении, но ломаются при изменении размера окна.
Причины:
Решения:
resize для пересоздания или
обновления сцен:window.addEventListener('resize', function() {
controller.update(true); // пересчитывает позиции сцен
});
triggerHook и duration при
изменении ширины:scene.duration(window.innerHeight / 2);
scene.triggerHook(0.5);
Ошибка: анимации или события ScrollMagic не работают вместе с jQuery или другими скриптами.
Причины:
transform CSS
в GSAP и сторонних библиотек.Решения:
addIndicators для отладки:scene.addIndicators({name: "Debug Scene"});
document.ready:$(document).ready(function() {
// создание контроллера и сцен
});
Симптомы: лаги при скролле, высокая нагрузка на CPU.
Причины:
Решения:
timeline.will-change и GPU-ускорение для
CSS-анимаций:.element {
will-change: transform, opacity;
}
requestAnimationFrame:var ticking = false;
window.addEventListener('scroll', function() {
if (!ticking) {
requestAnimationFrame(function() {
controller.update(true);
ticking = false;
});
ticking = true;
}
});
.setPin()Ошибка: элемент фиксируется, но ломает поток документа или перекрывает другие элементы.
Причины:
position: relative.Решения:
position: relative родительскому
контейнеру:.container {
position: relative;
}
duration сцены по высоте элемента:scene.duration(document.querySelector("#pinned").offsetHeight);
scene.refresh();
Эти методы охватывают большинство типичных проблем при работе с ScrollMagic и позволяют поддерживать стабильную работу сцен, анимаций и событий на любых проектах.