2017-04-25 4 views
0

Ich arbeite in ActionScript 3 mit einer Greensock TweenMax-Timeline. Ich habe einen einseitigen Scroller mit zwei Tasten (zurück nach oben und Stop/Play-Taste). Der Scroller spielt automatisch onLoad mit einer Verzögerung von 4 Sekunden. Wenn ich die Stop/Play-Taste drücke, wird die Verzögerung nicht gestoppt. Ich muss die ganzen vier Sekunden warten, bevor es funktioniert. Auch die Verzögerung von 4 Sekunden tritt nur auf, wenn der Scroller zum ersten Mal läuft. Wie kann ich die Verzögerung von 4 Sekunden jedes Mal, wenn der Scroller wiederholt wird, erhalten? Wie kann ich mit der Stop/Play-Taste die Verzögerung aufheben und abspielen? Ich habe zwei Tage daran gearbeitet und verschiedene Techniken (für Schleifen, Timer, verzögerte Anrufe usw.) ohne Erfolg ausprobiert. Wenn jemand Ideen hat, werde ich es sehr schätzen.Wie überschreibe ich eine Verzögerung in TweenMax?

1) Code, der die Timeline beginnt:

myTween = new TweenMax(content_mc, 60, {delay:4, y:22, ease: Power0.easeNone, onComplete: restartFromTop }); 

2) Diese Funktion steuert die Stop/Play-Taste

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) Mit dieser Funktion das Neustarten des Scrollers steuert, wenn es wiederholt.

private function restartFromTop():void 
     {  
      myTween.restart() 
      playState = true; 
     } 

4) Diese Funktion gibt die nach oben-Taste steuert

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); 
     } 

Antwort

1

Ich konnte nicht das erste Problem reproduzieren Sie konfrontiert sind, das ist die Frage der Verzögerung mit pause und resume. Ich versuchte ein einfaches Tween mit 4 Sekunden Verzögerung und war in der Lage zu unterbrechen und das Tween ohne Verzögerung wieder aufzunehmen.

Für das andere Problem mit restart nimmt die TweenMax restart Funktion ein paar Argumente, und die ersten includeDelay:Boolean ist, die standardmäßig auf false gesetzt ist. Wenn Sie diese Eigenschaft auf "true" festlegen, wird das Problem behoben.

Auszug aus der Dokumentation:

includeDelay: Boolean (default = false) - Legt fest, ob die Verzögerung (falls vorhanden) geehrt wird beim Neustart. Zum Beispiel, wenn ein Tween eine Verzögerung von 1 Sekunde hat, wie neue TweenLite (mc, 2, {x: 100, Verzögerung: 1}); und dann später Neustart() aufgerufen wird, wird es sofort beginnen, aber Neustart (true) wird dazu führen, dass die Verzögerung geehrt wird, so dass es nicht für weitere 1 Sekunde beginnen wird.

Voll docs gefunden werden kann here

So sollte der folgende Code Ihr Neustart Problem beheben:

myTween.restart(true); 

Für Ihre erste Frage, ich würde Ihnen empfehlen, ein minimales Szenario zu erstellen, es zu reproduzieren und wenn ja, poste bitte einen Kommentar zu meiner Antwort hier.

Hoffe, das hilft. Prost.

+0

Vielen Dank. Es hat definitiv geholfen :) – latoyale

Verwandte Themen