myInterval = setInterval(function(){
MyFunction();
},50);
function MyFunction()
{
//Can I call clearInterval(myInterval); in here?
}
L'intervalle ne s'arrête pas (n'est pas effacé), si ce que j'ai codé ci-dessus est correct, cela m'aidera à chercher ailleurs la cause du problème. Merci.
EDIT: Supposons qu'il se termine quelques intervalles avant que clearInterval soit appelé, ce qui supprime le besoin de setTimeout.
Tant que vous avez la portée de la variable interval
enregistrée, vous pouvez l'annuler de n'importe où.
Dans un périmètre "enfant":
var myInterval = setInterval(function(){
clearInterval(myInterval);
},50);
Dans une portée "frère":
var myInterval = setInterval(function(){
foo();
},50);
var foo = function () {
clearInterval(myInterval);
};
Vous pourriez même passer l'intervalle s'il sortait du cadre:
var someScope = function () {
var myInterval = setInterval(function(){
foo(myInterval);
},50);
};
var foo = function (myInterval) {
clearInterval(myInterval);
};
clearInterval(myInterval);
fera l'affaire pour annuler l'intervalle chaque fois que vous en aurez besoin. Si vous souhaitez annuler immédiatement après le premier appel, vous devez prendre setTimeout
à la place. Et bien sûr, vous pouvez l'appeler dans la fonction Intervalle elle-même.
var myInterval = setInterval(function() {
if (/* condition here */){
clearInterval(myInterval);
}
}, 50);
voir un EXEMPLE ici .
var interval = setInterval(function() {
if (condition) clearInterval(interval); // here interval is undefined, but when we call this function it will be defined in this context
}, 50);
Ou
var callback = function() { if (condition) clearInterval(interval); }; // here interval is undefined, but when we call this function it will be defined in this context
var interval = setInterval(callback, 50);
À partir de votre code, ce que vous semblez vouloir faire est d'exécuter une fonction et de l'exécuter encore et encore jusqu'à ce qu'une tâche soit effectuée ...
C'est en fait une tâche pour la setTimeout()
, l'approche est similaire:
var myFunction = function(){
if( stopCondition ) doSomeStuff(); //(do some stuff and don't run it again)
else setTimeout( myFunction, 50 );
}
myFunction(); //immediate first run
Bien sûr, si vous voulez vraiment utiliser setInterval pour une raison quelconque, la réponse de @ jbabey semble être la meilleure :)
Vous pouvez le faire en utilisant une astuce avec window.setTimeout
var Interval = function () {
if (condition) {
//do Stuff
}
else {
window.setTimeout(Interval, 20);
};
};
window.setTimeout(Interval, 20);