GSAP timeline various onComplete functions on different tweens
首先,我是GSAP和ScrollMagic的新手,所以如果我在这里问一个愚蠢的问题,请原谅我。我一直在浏览互联网,但未能成功找到适合我的问题的正确答案。
无论如何,我正在尝试创建一个时间轴,在每个时间轴上,将使用特定的参数完成对每个"至"功能的调用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | var controller = new ScrollMagic.Controller(); var timeline = new TimelineLite(); var div = $('div'); timeline.to(div, 0.5, { opacity: 0, onComplete: toggleOverlay(0) },"part-1") .to(div, 0.5, { opacity: 1, onComplete: toggleOverlay(1) },"part-2") .to(div, 0.5, { opacity: 0, onComplete: toggleOverlay(2) },"part-3"); var scene = new ScrollMagic.Scene({ triggerElement:"#trigger-event", duration: 500 }) .setTween(timeline) .addTo(controller); function toggleOverlay(i){ console.log(i); } |
发生的情况:滚动位置到达"#trigger-event"后,将调用时间轴。随后,将基于触发事件之后和结束(持续时间)之前的滚动位置调用" .to"功能。
我在这里面临的问题是onComplete函数是在页面加载时直接调用的。这可能与'.setTween(timeline)'有关,因为我可以想象它会加载到整个时间轴中。
什么是解决我的问题的方法,或者什么是好的替代方法?
编辑:这是一个JSFiddle:https://jsfiddle.net/04db5ja5/
谢谢你,
恩齐奥
您已经通过使用括号
在GSAP中,解决方法是将
1 2 3 | ... onComplete: toggleOverlay ... |
为了接收其他参数,您需要使用称为
1 2 3 | ... onCompleteParams: [0] ... |
因此,您的总体代码应如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | ... timeline.to(div, 0.5, { opacity: 0, onComplete: toggleOverlay, onCompleteParams: [0] },"part-1") .to(div, 0.5, { opacity: 1, onComplete: toggleOverlay, onCompleteParams: [1] },"part-2") .to(div, 0.5, { opacity: 0, onComplete: toggleOverlay, onCompleteParams: [2] },"part-3"); ... |