Boucle sans fin en JavaScript qui ne déclenche pas d'avertissement par navigateur
-
09-06-2019 - |
Question
J'affiche un ensemble d'images en superposition à l'aide de Google Maps. L'affichage de ces images doit se faire sans fin, mais la plupart des navigateurs le détectent et affichent un avertissement.
Existe-t-il un moyen de créer une boucle sans fin en JavaScript afin que le navigateur ne l'arrête pas ni ne le prévienne?
La solution
Essayez setInterval ou setTimeout .
Voici un exemple:
(show = (o) => setTimeout(() => {
console.log(o)
show(++o)
}, 1000))(1);
.as-console-wrapper { max-height: 100% !important; top: 0; }
Autres conseils
Vous devez utiliser une minuterie pour apporter en continu de nouvelles images au lieu d’une boucle infinie. Vérifiez la fonction setTimeout ()
. La mise en garde est que vous devez l'appeler dans une fonction qui s'appelle elle-même, pour qu'elle attende à nouveau. Exemple tiré de w3schools :
var c = 0
var t;
function timedCount() {
document.getElementById('txt').value = c;
c = c + 1;
t = setTimeout("timedCount()", 1000);
}
<form>
<input type="button" value="Start count!" onClick="timedCount()">
<input type="text" id="txt">
</form>
Le code suivant définira un intervalle et définira l'image sur l'image suivante d'un tableau de sources d'image toutes les secondes.
function setImage(){
var Static = arguments.callee;
Static.currentImage = (Static.currentImage || 0);
var elm = document.getElementById("imageContainer");
elm.src = imageArray[Static.currentImage++];
}
imageInterval = setInterval(setImage, 1000);
Au lieu d'utiliser une boucle infinie, créez un minuteur qui continue de se déclencher toutes les n secondes. Vous obtiendrez l'aspect "courir pour toujours" sans que le navigateur ne se bloque.
Essayez peut-être d'utiliser une minuterie qui récupère l'image suivante à chaque fois qu'elle coche. Malheureusement, je ne connais aucun JavaScript et je ne peux donc pas fournir d'échantillon de code
.Si cela vous convient, vous pouvez charger de nouvelles images pour répondre aux interactions de l'utilisateur, comme ce site Web (faites simplement défiler vers le bas).
Juste une réponse formelle:
var i = 0;
while (i < 1) {
do something...
if (i < 1) i = 0;
else i = fooling_function(i); // must return 0
}
Je pense qu'aucun navigateur ne détecterait de telles choses.
function foo() {
alert('hi');
setTimeout(foo, 5000);
}
Ensuite, utilisez simplement une action du type "onload". pour lancer 'foo'