En JavaScript, l'utilisation de setInterval permet l'exécution d'une fonction à intervalles réguliers. Cependant, il est parfois nécessaire d'ajuster l'intervalle de manière dynamique lors de l'exécution de la fonction.
Dans le code fourni, l'utilisateur vise à manipuler une chaîne avec un effet aléatoire en continu jusqu'à ce qu'un compteur atteigne un seuil. Pour retarder cet effet, l'utilisateur souhaite ajuster dynamiquement l'intervalle de setInterval en fonction de la valeur du compteur.
Malheureusement, la simple modification du paramètre d'intervalle dans la fonction setInterval elle-même est inefficace. Pour résoudre ce problème, une approche différente est nécessaire.
Solution 1 : Utiliser une fonction anonyme
La première solution consiste à utiliser une fonction anonyme pour réinitialiser et ajuster dynamiquement setInterval. :
var counter = 10; var myFunction = function() { clearInterval(interval); // Clear the current interval counter *= 10; // Update the interval value interval = setInterval(myFunction, counter); // Create a new interval with the updated value } var interval = setInterval(myFunction, counter); // Initialize the interval with the initial value
Dans cette approche, une fonction anonyme (myFunction) est définie au sein de la fonction appelée par le setInterval initial. La fonction anonyme efface l'intervalle actuel, met à jour la valeur de l'intervalle en fonction du compteur, puis définit un nouvel intervalle à l'aide de la valeur mise à jour. Cela permet un ajustement dynamique de l'intervalle à mesure que le compteur change.
Solution 2 : Utiliser setTimeout
Comme suggéré par A. Wolff, l'utilisation de setTimeout peut éliminer le besoin de Effacer manuellement l'intervalle. Avec setTimeout, un nouvel intervalle est programmé après chaque itération sans qu'il soit nécessaire d'effacer le précédent :
var counter = 10; var myFunction = function() { counter *= 10; // Update the interval value setTimeout(myFunction, counter); // Schedule a new interval with the updated value } setTimeout(myFunction, counter); // Initialize the interval with the initial value
Dans cette approche, la fonction anonyme (myFunction) n'a besoin que de mettre à jour la valeur de l'intervalle, et setTimeout prend soin de planifier la prochaine itération à l'intervalle mis à jour.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!