2015-06-22 4 views
5

Ich versuche, eine Reihe von Argumenten zu einer Animate-Funktion innerhalb Snap SVG einschließlich einer Callback-Funktion zu übergeben. Der Callback (in diesem Fall das Entfernen des Elements) wird jedoch sofort beim Klicken ausgelöst und nicht nachdem die Animation abgeschlossen wurde. Wie es jetzt ist, wird das Element entfernt und die Animate-Funktion wird dann fehlerhaft, weil das Element nicht mehr existiert. Irgendwelche Ideen?Snap SVG .animate Rückruf wird sofort ausgelöst

var theCallback = theApp.destroyAnElement("#"+ theParentID); 

//The function call 
theAnimationFunctions.animateSingleSVGElementWithSnap('.stopped','#svg-container',{transform: 's1,0'}, 500, mina.backin, 0,0,theCallback); 

// The animate function 
    animateSingleSVGElementWithSnap: function(element, parentSVG, animationValues, duration, easing, initialDelay, callback) { 
     var s = Snap.select("#"+ parentSVG), 
      theElement = s.select(element); 

     setTimeout(function() { 
     theElement.stop().animate(animationValues, duration, easing, function() { 
      callback; 
     }); 
     }, initialDelay); 
    } 

UPDATE

theCallback = function() { theApp.destroyAnElement("#"+ theElementID); }; 

theAnimationFunctions.animateSingleSVGElementWithSnap('.stopped','#svg-container',{transform: 's1,0'}, 500, mina.backin, 0,0,theCallback); 

theAnimationFunctions = { 
    animateSingleSVGElementWithSnap: function(element, parentSVG, animationValues, duration, easing, initialDelay, callback) { 
    var s = Snap.select("#"+ parentSVG), 
    theElement = s.select(element); 

    setTimeout(function() { 
     theElement.stop().animate(animationValues, duration, easing, function() { 
      callback(); 
     }); 
    }, initialDelay); 
} 

Mit dem oben genannten Updates ich jetzt einen Fehler bei der Beendigung der Animation erhalten:

"Uncaught TypeError: callback is not a function" 
+0

Haben Sie definieren 'theCallback' _after_' theAnimationFunctions.animateSingleSVGElementWithSnap' nennen? Wenn dies der Fall ist, wird 'theCallback' beim Aufruf" undefiniert "sein, was in der Tat" keine Funktion "ist. –

+0

theCallback ist vor dem Funktionsaufruf definiert - nur schlechtes Einfügen von meiner Seite. – Yuschick

+1

Es sieht aus wie die Parameter und Argumente von 'animateSingleSVGElementWithSnap: function (element, parentSVG, animationValues, duration, easing, initialDelay, callback) {' stimmen nicht mit der Aufrufseite überein 'theAnimationFunctions.animateSingleSVGElementWithSnap ('. Stopped', '# svg-container ', {transform:' s1,0 '}, 500, mina.backin, 0,0, theCallback); '. Die Aufrufstelle hat einen zusätzlichen Parameter, und "Callback" erhält wahrscheinlich das vorletzte Argument, d. H. "0". –

Antwort

2

Sie haben den Rückruf in einem anonymen einzuwickeln Funktion, um zu verhindern, dass es sofort zündet:

var theCallback = function() { theApp.destroyAnElement("#"+ theParentID); }; 

Und dann es als eine Funktion aufrufen:

theElement.stop().animate(animationValues, duration, easing, function() { 
     theCallback(); // <-- notice the parenthesis 
    }); 
+1

Das macht definitiv Sinn. Dies wirft jedoch einen Fehler "Rückruf ist keine Funktion". – Yuschick

+1

@Yuschick Es sollte nicht. Können Sie Ihre Frage bitte mit mehr Code aktualisieren und angeben, wo der Fehler auftaucht? –

+0

@Musicall_ut Ich habe ein Update des Codes und des Fehlers gepostet. – Yuschick