如何覆盖 TweenMax 中的延迟?
How do I overwrite a delay in TweenMax?
我正在使用 Greensock TweenMax 时间轴在 actionscript 3 中工作。我有一个带有两个按钮的单页滚动条(返回顶部和 stop/play 按钮)。
滚动条自动播放 onLoad,延迟 4 秒。当我按下 stop/play 按钮时,它不会停止延迟。我必须等待整整四秒钟才能起作用。此外,4 秒延迟仅在滚动条第一次运行时发生。每次滚动条重复时,如何让 4 秒延迟发生?如何让 stop/play 按钮覆盖延迟并播放?我已经为此工作了两天,并尝试了各种技术(循环、定时器、延迟调用等)但没有成功。如果有人有想法,我将不胜感激。
1) 启动时间线的代码:
myTween = new TweenMax(content_mc, 60, {delay:4, y:22, ease: Power0.easeNone, onComplete: restartFromTop });
2) 该函数控制stop/play按钮
private function toggler(e:MouseEvent = null):void
{
if (playState == true){
toggleBtn.gotoAndStop(2);
myTween.pause();
playState = false;
trace("MC is now paused and stopped");
}
else if(playState == false) {
myTween.resume();
toggleBtn.gotoAndStop(1);
playState = true;
trace("MC is resumed from pause");
}
}
3) 该函数控制滚动条重复时的重启。
private function restartFromTop():void
{
myTween.restart()
playState = true;
}
4) 该函数控制返回顶部按钮
private function backToTop(event:MouseEvent):void
{
myTween.reverse();
if (playState == true){
myTween.restart();
myTween.resume();//stop animation
//toggleBtn.gotoAndStop(2);//changes button to pause
toggleBtn.buttonMode = true;
trace("page is scrolling");
}
if (playState == false){
myTween.restart();
myTween.pause();//stop animation
trace("play button is paused");
trace(timer);
}
//Adds a hand cursor on the button and adds a click event to the button.
toggleBtn.buttonMode = true;
toggleBtn.addEventListener(MouseEvent.CLICK, toggler);
}
我无法重现您面临的第一个问题,即 pause
和 resume
的延迟问题。我尝试了一个延迟 4 秒的简单补间,并且能够毫不延迟地暂停和恢复补间。
对于 restart
的另一个问题,TweenMax restart
函数有几个参数,第一个参数是 includeDelay:Boolean
,默认设置为 false。将此 属性 设置为 true 可解决此问题。
文档摘录:
includeDelay:Boolean (default = false) — Determines whether or not the
delay (if any) is honored when restarting. For example, if a tween has
a delay of 1 second, like new TweenLite(mc, 2, {x:100, delay:1}); and
then later restart() is called, it will begin immediately, but
restart(true) will cause the delay to be honored so that it won't
begin for another 1 second.
可以找到完整的文档here
因此,以下代码应该可以解决您的重启问题:
myTween.restart(true);
对于你的第一个问题,我建议你创建一个最小的场景来重现它,如果是的话,请 post 在这里对我的回答发表评论。
希望这对您有所帮助。干杯。
我正在使用 Greensock TweenMax 时间轴在 actionscript 3 中工作。我有一个带有两个按钮的单页滚动条(返回顶部和 stop/play 按钮)。 滚动条自动播放 onLoad,延迟 4 秒。当我按下 stop/play 按钮时,它不会停止延迟。我必须等待整整四秒钟才能起作用。此外,4 秒延迟仅在滚动条第一次运行时发生。每次滚动条重复时,如何让 4 秒延迟发生?如何让 stop/play 按钮覆盖延迟并播放?我已经为此工作了两天,并尝试了各种技术(循环、定时器、延迟调用等)但没有成功。如果有人有想法,我将不胜感激。
1) 启动时间线的代码:
myTween = new TweenMax(content_mc, 60, {delay:4, y:22, ease: Power0.easeNone, onComplete: restartFromTop });
2) 该函数控制stop/play按钮
private function toggler(e:MouseEvent = null):void
{
if (playState == true){
toggleBtn.gotoAndStop(2);
myTween.pause();
playState = false;
trace("MC is now paused and stopped");
}
else if(playState == false) {
myTween.resume();
toggleBtn.gotoAndStop(1);
playState = true;
trace("MC is resumed from pause");
}
}
3) 该函数控制滚动条重复时的重启。
private function restartFromTop():void
{
myTween.restart()
playState = true;
}
4) 该函数控制返回顶部按钮
private function backToTop(event:MouseEvent):void
{
myTween.reverse();
if (playState == true){
myTween.restart();
myTween.resume();//stop animation
//toggleBtn.gotoAndStop(2);//changes button to pause
toggleBtn.buttonMode = true;
trace("page is scrolling");
}
if (playState == false){
myTween.restart();
myTween.pause();//stop animation
trace("play button is paused");
trace(timer);
}
//Adds a hand cursor on the button and adds a click event to the button.
toggleBtn.buttonMode = true;
toggleBtn.addEventListener(MouseEvent.CLICK, toggler);
}
我无法重现您面临的第一个问题,即 pause
和 resume
的延迟问题。我尝试了一个延迟 4 秒的简单补间,并且能够毫不延迟地暂停和恢复补间。
对于 restart
的另一个问题,TweenMax restart
函数有几个参数,第一个参数是 includeDelay:Boolean
,默认设置为 false。将此 属性 设置为 true 可解决此问题。
文档摘录:
includeDelay:Boolean (default = false) — Determines whether or not the delay (if any) is honored when restarting. For example, if a tween has a delay of 1 second, like new TweenLite(mc, 2, {x:100, delay:1}); and then later restart() is called, it will begin immediately, but restart(true) will cause the delay to be honored so that it won't begin for another 1 second.
可以找到完整的文档here
因此,以下代码应该可以解决您的重启问题:
myTween.restart(true);
对于你的第一个问题,我建议你创建一个最小的场景来重现它,如果是的话,请 post 在这里对我的回答发表评论。
希望这对您有所帮助。干杯。