Проблема здесь в том, что ваш элемент никогда не соответствует пороговому значению наблюдателя пересечения, поскольку у вас есть transform: translateX(-100%)
, даже когда родительский раздел прокручивается до.
Таким образом, вы, вероятно, должны либо
- Используйте другой элемент в качестве триггера для этого элемента, который виден (моя рекомендация).
- Измените -100% на что-то вроде -99% и измените порог значение чего-то (например, 0), чтобы оно соответствовало требованиям.
- Использование второго наблюдателя пересечения с другими параметрами для пересечения только с проблемным элементом c.
Примечание: вы должны использовать gsap
вместо TimelineMax
/ TweenMax
шт. Это из GSAP 2. См. примечания GSAP 3 для получения дополнительной информации. Ваш код немного очищен (без реализации перечисленных выше предложений):
// Intersection observer stuff
var callback = function (entries, observer) {
entries.forEach(function (entry) {
if (entry.intersectionRatio > 0) {
entry.target.timeline.play();
}
});
};
var observerOptions = {
rootMargin: '100px',
threshold: 1.0
};
var observer = new IntersectionObserver(callback, observerOptions);
// Animation logic
var animations = document.querySelectorAll(".animate");
animations.forEach(function (el, index) {
el.timeline = gsap.timeline({paused: true});
if(el.classList.contains('background')) {
el.timeline.to(el, {
ease: 'power2.inOut',
x: 0,
duration: 1,
})
}
else {
el.timeline.to(el, {
ease: 'power2.inOut',
y: 0,
duration: .6
})
.to(el, {
ease: 'power2.inOut',
opacity: 1,
delay: -.5,
duration: .5,
})
}
observer.observe(el);
});