调整大小时的TimelineLite缓存补间值

时间:2015-11-18 23:40:49

标签: greensock tweenmax tweenlite gsap

我有一个网站,我使用TimelineLite暂停,并使用滚动条手动推进时间轴。

我在整个时间线上也有5个停顿,所以我可以点击一个按钮观看一个场景'的时间表。

每个动画场景基本上都在顶部的屏幕上进行补间,而下一个元素从底部补间到屏幕。

一切正常。

然而,当我调整浏览器大小时,我注意到时间轴的补间仍然是旧值的动画。

我的时间轴包含TweenLite.to(...)个补间。例如,如果我的浏览器高度为700像素,并且我将视图中的场景1和场景2添加到视图中,那么当我调整大小并使用timeline.reverse();时,我会看到场景2补间回到700像素。 (场景2绝对定位,translateY设置为100%。但是,由于我的补间使用y: '100%',我希望它反转到100%而不是这个旧的预调整大小值700像素。

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

所以当我设置百分比值和场景1补间的百分比时,我发现场景2在像素中补间非常奇怪。

是怎么回事?如何在补间中阻止此像素值缓存?

我已经尝试了invalidate()kill()clear(),然后将时间轴设置为null,然后在新的时间轴上重新插入新的补间,但不知怎的那些补间值仍然存在。

我不知所措。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

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

yPercent(以及xPercent)所做的是,无论屏幕大小如何,它们始终会对齐您的元素,因此会根据您提供的值做出响应。

Here 是由 GSAP 人员自己制作的一个例子,根据它的外观以及我从您的问题中能够理解的内容,实际上也非常接近你自己的情况。

Petr Tichy 还有 video tutorial ,他解释了使用xxPercent之间的差异。

P.S。您可以分享您正在处理的这个网站,还是准备一个小提琴或一个孤立的问题?这有助于我们提出准确的解决方案。

答案 1 :(得分:0)

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

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

如果这对您有用,请检查元素上的._gsTransform变量。您将看到一些可以手动设置为0的x,y值或者您需要设置的其他任何值。

相关问题