0

我有一个“项目”页面,我在其中展示项目片段,我希望每个项目都在滚动时淡入。我正在尝试使用以下 HTML 和 JavaScript 为每个项目实施时间表:

<!-- Page contains multiple projects that follow this template -->
<div id="project-trigger">
     <div class="project">
          <img class="project-image" src="image1" alt="">
          <div class="description">
               <h3 class="project-text">Lorem Ipsum</h3>
               <p class="project-text">Lorem ipsum dolor sit amet consectetur, adipisicing elit. Fuga impedit numquam modi accusamus.</p>
         </div>
     </div>
</div>
let projectTrigger = document.querySelectorAll('#project-trigger');

projectTrigger.forEach(project => {
    let timeline = gsap.timeline({
        scrollTrigger:{
            trigger:"#project-trigger",
            start:"center bottom",
            ease:"power2.easeOut",
            toggleActions: "play none none reverse",
        }
    })

    timeline.from(".project-image",{
        x:-200,
        opacity:0,
        duration:0.5
    }).from(".project-text",{
        x:200,
        opacity:0,
        duration:0.5,
        stagger:0.2
    }, "-=0.5")
}
)

我希望图像从左侧淡入,文本从右侧淡入。目前,它不起作用 - 图像在中途消失然后停止,并且文本根本不滚动。

是否有可能实现我所追求的?如果是这样,我哪里错了?

代码笔: https ://codepen.io/jacobcollinsdev/pen/jOrpKja ?editors=1010

4

1 回答 1

2

您的 HTML 无效。不能有多个具有相同 ID 的元素。如果你需要做类似的事情,你应该使用一个类。

您还犯了最常见的 ScrollTrigger 错误之一:当您想使用范围选择器时使用通用选择器。我在关于有效动画的文章中写了更多关于如何做到这一点的内容。

修复这些错误,你应该得到这样的东西:

const projectTriggers = document.querySelectorAll(".project-trigger");

projectTriggers.forEach(addTimeline);

function addTimeline(project, index) {
  const image = project.querySelector(".project-image");
  const text = project.querySelector(".project-text");
  
  const timeline = gsap.timeline({
    scrollTrigger: {
      trigger: project,
      start: "center bottom",
      ease: "power2",
      toggleActions: "play none none reverse"
    }
  })
  .from(image, {
    x: -200,
    opacity: 0,
    duration: 0.5
  })
  .from(text, {
    x: 200,
    opacity: 0,
    duration: 0.5,
    stagger: 0.2
  }, "-=0.5");
}

演示

要在开始时摆脱无样式内容的闪光,请参阅这篇文章

于 2020-11-05T15:42:48.143 回答