在 Scrollmagic 中添加多个图钉和动画背景位置有问题吗?

Trouble with adding multiple pins and animating background position in Scrollmagic?

我已将 TimeLineMax 添加到我正在处理的场景中。该功能运行良好,但我在一些细节上遇到了问题。

我希望我的场景像这个网站一样固定 http://www.google.com/inbox/#bundles。通过这种方式,我希望在一个场景中有多个图钉,这样用户就无法在不查看动画的情况下滚动浏览我的动画。

这是我目前工作的演示站点:https://so-staging.herokuapp.com/users/sign_in#publisher-demo-container

向下滚动可以看到我的进度。将弹出三个步骤,然后动画消失。我还根据滚动调整了#publisher-demo-steps 的背景位置。

然而,这并不是我们想要的目标。我想要这个: 1. Pin #publisher-demo 2. 在滚动条上触发第 1 步动画背景位置。 3. 开火第2步 4. 启动第 3 步

我希望固定每个步骤,以便用户在动画完成之前无法转到下一步。

我知道这很令人困惑,而且我已经盯着它看了太久了。谢谢您的帮助。这是我的 scrollmagic 和 GSAP 代码。

var controller = new ScrollMagic();

    var tween = new TimelineMax()
      .add(TweenMax.to("#publisher-demo-steps", 0.5, {backgroundPosition : "50% 23%"}))
      .add(TweenMax.to(".blue-circle", 1, {display: "block"}))
      .add(TweenMax.to(".blue-circle", 1, {className: "+=animated zoomOut", display: "none", delay:3}))
      .add(TweenMax.to("#publisher-demo-steps", 0.5, {backgroundPosition : "22% 52%"}))
      .add(TweenMax.to(".red-circle", 1, {display: "block"}))
      .add(TweenMax.to(".red-circle", 1, {className: "+=animated zoomOut", display: "none", delay:3}))
      .add(TweenMax.to("#publisher-demo-steps", 0.5, {backgroundPosition : "76% 50%"}))
      .add(TweenMax.to(".green-circle", 1, {display: "block"}))
      .add(TweenMax.to(".green-circle", 1, {className: "+=animated zoomOut", display: "none", delay:3}));

    var scene = new ScrollScene({triggerElement: "#publisher-demo", duration: 4000, triggerHook: -100})
              .setPin("#publisher-demo")
              .setTween(tween)
              .addTo(controller);

如果我对您的理解正确,您希望触发动画不受滚动进度限制地播放。

执行此操作的方法是不 link 制作 pin 的场景。 只要场景有持续时间,它就会 link 动画进度滚动进度。

然后你只需要为每个动画触发点添加一个场景。

即像这样:

new ScrollScene({triggerElement: "#trigger-element", duration: 4000, triggerHook: 0})
          .setPin("#publisher-demo")
          .addTo(controller);

new ScrollScene({triggerElement: "#trigger-element", triggerHook: 0})
          .setTween(new TimelineMax()
               .to("#publisher-demo-steps", 0.5, {backgroundPosition : "50% 23%"})
               .to(".blue-circle", 1, {display: "block"})
          )
          .addTo(controller);

new ScrollScene({triggerElement: "#trigger-element", triggerHook: 0, offset: 300)
          .setTween(TweenMax.to(".blue-circle", 1, {className: "+=animated zoomOut", display: "none", delay:3}))
          .addTo(controller);

一般说明:

  • 如您所见,我使用了与固定元素不同的触发元素。它应该是绝对定位的,并且与固定元素位于相同的位置。我这样做的原因是,因为固定元素移动并且会为其他场景提供错误的起始位置。
  • -100 的 triggerHook 没有任何意义。根据定义,该值只能介于 0 和 1 之间。
  • 您可以使用 shorthand TimelineMax().to() 而不是 TimelineMax().add(TweenMax.to())(参见 http://greensock.com/docs/#/HTML5/GSAP/TimelineMax/to/
  • 请注意,ScrollMagic 2 已经发布了一段时间。语法非常相似,所以你应该考虑升级。