关于gsap:Timeline调整大小时补间的精简值

TimelineLite caching values of tweens upon resize

我有一个使用TimelineLite的站点已暂停,并使用滚动条手动显示了时间轴。

我在整个时间轴上还散布了5个暂停,因此我可以单击一个按钮并观看时间轴的一个"场景"。

每个动画场景基本上在顶部移出屏幕,而下一个元素从底部移入屏幕。

一切正常。

但是,当我调整浏览器的大小时,我注意到时间轴的补间仍在从旧值开始设置动画。

我的时间轴由TweenLite.to(...)补间组成。例如,如果我的浏览器高度为700像素,并且将场景1移出视图,将场景2移入视图,则当我调整大小并使用timeline.reverse();时,我会看到场景2补间为700像素。 (场景2在translateY设置为100%的情况下是绝对定位的。)但是,由于我的补间正在使用y: '100%',所以我希望它会反转为100%,而不是此旧的预调整大小的700像素。

奇怪的是,最初位于0,0并补间为0,-100%的场景1仍然补间为百分比值,因此看起来不错。

因此,当我设置百分比值而场景1补间百分比时,我发现场景2补间像素真的很奇怪。

这是怎么回事,以及如何防止此像素值在补间中缓存?

我已经尝试过invalidate()kill()clear(),然后将时间轴设置为null,然后在新的时间轴上重新插入新的补间,但是以某种方式仍然存在那些补间值。

我很茫然。任何帮助将不胜感激。


回答我自己的问题,因为没有正确的答案。 GSAP将所有补间数据保存在实际的DOM元素上。尽管我将时间轴或补间设置为null,但它没有任何效果,因为当我补间相同的元素时,它将检查DOM元素是否具有变量GSAP事先保存的变量。

要解决此问题,我必须手动重置DOM元素变量。

如果这对您来说是个问题,请检查元素上的._gsTransform变量。您将看到一些x,y值,可以将其手动设置为0或将其设置为其他值。


我认为您应该使用yPercent设置补间动画,而不是绝对像素值,或者不简单地动画y属性。

yPercent(和xPercent)的作用是,无论屏幕大小如何,它们将始终对齐您的元素,从而根据您提供的值进行响应。

这是GSAP员工自己制作的一个例子,从它的外观以及我从您的问题中能够理解的内容来看,它实际上也非常符合您的情况。

还有Petr Tichy的视频教程,解释了使用xxPercent的区别。

P.S。您可以共享您正在使用的此网站,还是准备小提琴或Codepen来解决问题?这将有助于我们提出准确的解决方案。