2015-06-22 9 views
5

Próbuję przekazać zestaw argumentów do funkcji animacji w Snap SVG, w tym funkcji wywołania zwrotnego. Jednak wywołanie zwrotne (w tym przypadku jest to usunięcie elementu) uruchamia się natychmiast po kliknięciu, a nie po zakończeniu animacji. Tak jak obecnie, element jest usuwany, a funkcja animacji to błędy, ponieważ element już nie istnieje. Jakieś pomysły?Snap SVG. Natychmiastowe wywołania zwrotne odpalają natychmiast

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

Z powyższych aktualizacjach, teraz pojawia się błąd po zakończeniu animacji:

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

Czy można zdefiniować 'theCallback' _after_ wywołanie' theAnimationFunctions.animateSingleSVGElementWithSnap'? Jeśli tak, 'theCallback' będzie' undefined' na inwokacji, która w rzeczy samej nie jest funkcją. –

+0

theCallback jest zdefiniowany przed wywołaniem funkcji - tylko słabe wklejenie z mojej strony. – Yuschick

+1

Wygląda na to, że parametry i argumenty funkcji 'animateSingleSVGElementWithSnap: (element, parentSVG, wartości animacji, duration, easing, initialDelay, callback) {' nie pasują do strony wywołania 'theAnimationFunctions.animateSingleSVGElementWithSnap ('. Stopped', '# svg-container ', {transform:' s1,0 '}, 500, mina.backin, 0,0, theCallback); '. Strona wywoławcza ma jeden dodatkowy parametr, a "oddzwanianie" prawdopodobnie ma przypisany przedostatni argument, tj. '0'. –

Odpowiedz

2

Trzeba owinąć zwrotnego w anonimowy funkcja uniemożliwiająca natychmiastowe uruchomienie:

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

a następnie wywołać ją jako funkcję:

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

To z pewnością ma sens. Jednak powoduje to błąd "callback nie jest funkcją". – Yuschick

+1

@Yuschick To nie powinno. Czy możesz zaktualizować swoje pytanie, dodając więcej kodu, podając gdzie pojawia się błąd? –

+0

@Musicall_ut Opublikowałem aktualizację kodu i błędu. – Yuschick

Powiązane problemy