Я новичок в ScrollMagic, поэтому не уверен, что я упускаю из виду что-то очевидное.
Я создал codepen, который показывает, чего я пытаюсь достичь, и альтернативная версия, которая почти делает то, что я хочу, за исключением огромный разрыв, от которого я не могу избавиться.
По сути, хотелось бы иметь 3 слайда, которые располагаются друг на друге. Когда пользователь прокручивает, слайды один за другим переходят вверх, открывая тот, что находится внизу.
При прокрутке последнего слайда оставшееся содержимое на странице должно прокручиваться вверх, как если бы оно было прикреплено к нижней части последнего слайда, и с этого момента оно должно работать как обычная страница.
В настоящее время контейнер со всеми слайдами в нем прозрачно перекрывает остальную часть содержимого тела до тех пор, пока последний слайд не исчезнет с верхней части области просмотра, и это делает ScrollMagic.
Розовая полоса в кодовом поле предназначена для того, чтобы показать, где заканчивается дно контейнера для слайдов.
Вот соответствующий код:
function initController() {
controller = new ScrollMagic.Controller({
globalSceneOptions: {
triggerHook: "onLeave"
}
});
controller.scrollTo(function(pos) {
TweenMax.to(window, 1, {
scrollTo: {
y: pos,
autoKill: true
}
});
});
}
function initAnimation() {
wipeAnimation = new TimelineMax();
$.each(ui.slides, function(i, slide) {
wipeAnimation
.add(TweenMax.to(slide, 2000, {y: '0'}))
.add(TweenMax.fromTo(slide, 5000, {y: '0'}, {
y: '-100%',
onComplete: function() {
if (i < ui.slideCount - 1) { // don't run on last slide
updateActiveSlide(ui.slides[i + 1]); // activate next slide
}
},
onReverseComplete: function() {
updateActiveSlide(slide);
}
}));
});
}
function initScene() {
scene = new ScrollMagic.Scene({
triggerElement: ui.el,
duration: '100%'
})
.setTween(wipeAnimation)
.setPin(ui.el, {
pushFollowers: false
})
.addTo(controller);
}