如何覆盖 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);
        }

我无法重现您面临的第一个问题,即 pauseresume 的延迟问题。我尝试了一个延迟 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 在这里对我的回答发表评论。

希望这对您有所帮助。干杯。