2009-11-10 9 views
0

J'ai une fonction que je veux exécuter à un intervalle dans un cadre. J'utilise le code suivant pour lancer la fonction:Comment arrêtez-vous une fonction setInterval?

var intervalID = setInterval(intervalFunction, 3000); 

Puis, dans onRelease d'un bouton Je veux arrêter la fonction. Dans onRelease, je fais une transition vers une autre image.

btn.onRelease = function() 
{ 
    clearInterval(intervalID); 
    gotoAndPlay("nextframe"); 
} 

La fonction intervalFunction continue à s'exécuter. Qu'est-ce que je fais mal?

+1

Cela devrait fonctionner, peut vous envoyer plus de code? – Tom

+1

Avoir vérifié que clearInterval est appelé l'événement onRelease du bouton est déclenché et capturé correctement. Ensuite, essayez de rechercher la portée de intervalID. – bhups

Répondre

1

Vous ne savez pas si cela résout votre problème ou non, mais si vous avez seulement besoin de la minuterie pour se déclencher une fois, vous pouvez utiliser setTimeout() à la place. La seule différence entre this et setInterval() est que setInterval() répète et setTimeout() non. Here's some examples. Après la relecture de la question, vous pouvez probablement ignorer ce premier paragraphe, bien que les exemples puissent toujours aider. [/ EDIT]

En répondant à votre question spécifique cependant, il ne semble pas que vous fassiez quelque chose de mal. Peut-être une question stupide, mais intervalleID contient la valeur correcte dans le débogueur lorsque clearInterval est appelé?

+0

J'imprime la valeur de intervalID dans le débogueur et il semble valide. – zooropa

1

Je suis d'accord avec bhups - essayez de vérifier la portée de intervalID. À des fins de test, utilisez une référence absolue à intervalID et voyez si vous obtenez le même comportement.

btn.onRelease = function() 
{ 
    clearInterval(root.<<path to proper level>>.intervalID); 
    gotoAndPlay("nextFrame"); 
} 

Si vous utilisez AS 3, vous pouvez également essayer de passer à la classe Timer.

var timer:Timer = new Timer(3000); 
timer.addEventListener(TimerEvent.TIMER, intervalFunction); 
timer.start(); 

btn.addEventListener(MouseEvent.CLICK, btnClick); 

function btnClick(evt:MouseEvent):void 
{ 
    timer.stop(); 
    timer.removeEventListener(TimerEvent.TIMER, intervalFunction); 
    gotoAndPlay("nextFrame"); 
} 

(aucun de ceux-ci sont testés)

Questions connexes