redémarrer un setInterval

J’ai donc une timer qui fait pivoter un ensemble d’images de 5 secondes. Par conséquent, je lance ceci lors du lancement du document.

$(document).ready(function() { var intervalID=setInterval(function(){ rotate(); }, 5000); }); 

La fonction Rotation fait simplement pivoter les images. Cependant, j’autorise également l’utilisateur à sélectionner manuellement l’image qu’il regarde. Pour cette raison, je dois annuler SetInterval, puis le redémarrer à 5 secondes.

Ce que je cherche à faire est d’annuler l’intervalle puis de le recommencer en le faisant

 $('a').click(function(){ clearInterval(intervalID); intervalID=setInterval(function(){ rotate(); }, 5000); }); 

Cependant, le code ne semble pas réinitialiser l’intervalle comme je l’avais espéré.

Il suffit de faire en sorte que intervalID soit une variable globale en la déclarant en dehors de toutes les fonctions.

Avec votre code actuel, sa scope est limitée à la méthode $(document).ready() , de sorte que le problème que vous avez décrit risque de se produire.

Si la variable intervalID est déclarée dans la scope .ready() , les éléments suivants doivent fonctionner (non testés):

 $(document).ready(function() { var rotate = function() { ... }, intervalID = setInterval(rotate, 5000); $('a').click(function() { clearInterval(intervalID); intervalID = setInterval(rotate, 5000); }); }); 

Eh bien, il semble que vous déclariez interverID localement dans la fonction anonyme à partir de votre gestionnaire .ready() . En fait, je me demande pourquoi vous ne rencontrez pas d’ erreur de référence dans votre gestionnaire d’événements click, car intervalID ne peut y être identifié.

Vous devez vous assurer que cette variable est disponible et dispose d’un contexte partagé pour les deux fonctions. Meilleure façon, créez une méthode d’invocation anonyme anonyme autour de votre script et déclarez cette variable hors de scope.

 (function _myPrivateContext($, window, document, undefined) { var intervalID = null; $(document).ready(function() { intervalID = setInterval(rotate, 5000); }); $('a').click(function(){ clearInterval(intervalID); intervalID = setInterval(rotate, 5000); }); }(jQuery, window, document));