Une fonction setInterval peut-elle s'arrêter?
J'ai un jsFiddle avec un exemple de notre travail.
$().ready(function() {
$('.test').each(function() {
$this = $(this);
$this.data('Worker', function() {
$('#stop').html((parseInt($('#stop').html()) + 1))
})
setInterval($this.data('Worker'), 100);
});
$('#stop').click(function() {
//I want the worker function to stop being triggered here
$('.test').remove();
});
});
Ce que je voudrais faire est de fixer un travailleur de la fonction à un élément dans le DOM de sorte que lorsque l'élément est supprimé, le travailleur de la fonction s'arrête.
Est quelque chose comme cela possible?
source d'informationauteur Justin808
Vous devez vous connecter pour publier un commentaire.
Ici, vous allez:
Explication:
Tout d'abord nous avons besoin d'une fermeture - la fonction d'intervalle besoin de savoir quel test-DIV est son "propriétaire", ergo, nous avons besoin de passer une référence à la DIV dans la fonction d'intervalle. Dans mon code, la référence est stockée dans la
elem
variable, qui est disponible à l'intérieur de l'intervalle de la fonction en raison de la fermeture. Donc, l'intervalle de la fonction vérifie si oui ou non son "propriétaire" DIV est encore attaché à la DOM (par l'examen de son nœud parent). Si elle l'est, le stop-bouton est incrémenté. Si elle ne l'est pas, l'intervalle est effacé. Toutefois, afin d'être en mesure d'effacer l'intervalle, nous avons besoin de son ID de minuterie. Nous avons cette ID, parce que nous avons stocké à l'intérieur de la "tid" variable de la fonction setInterval appel renvoie l'ID de minuterie).Démo Live: http://jsfiddle.net/simevidas/ZjY7k/15/
La fin de la partie, mais j'ai résolu de cette façon:
Certainement le moyen le plus simple de tous: pas de superflu le stockage, pas de trucs.
Une autre façon que vous pouvez supprimer les intervalles, est à l'aide de la fonction clearInterval à l'intérieur de l'intervalle.
Si l'intervalle n'est pas clair, il va afficher un message d'alerte disant, "L'intervalle n'a pas clairement". Sinon, l'intervalle avec succès effacé.
C'est un fait peu connu, mais
setInterval
renvoie une valeur que vous pouvez utiliser avecclearInterval
pour annuler l'intervalle.Je soupçonne que la bonne façon de mettre en œuvre une "auto-terminaison" intervalle est de mettre en œuvre l'intervalle de via une série de délais d'attente.
En semi-pseudo:
Cette répétition de minuterie nettoie après lui-même.
Utiliser la fonction clearInterval: