Loop infinito em JavaScript que não dispara aviso pelo navegador
-
09-06-2019 - |
Pergunta
Estou exibindo um conjunto de imagens como sobreposição usando o Google Maps.A exibição dessas imagens deve ocorrer em um loop infinito, mas a maioria dos navegadores detecta isso e exibe um aviso.
Existe uma maneira de fazer um loop infinito em JavaScript para que ele não seja interrompido ou avisado pelo navegador?
Solução
Tentar setInterval ou setTimeout.
Aqui está um exemplo:
(show = (o) => setTimeout(() => {
console.log(o)
show(++o)
}, 1000))(1);
.as-console-wrapper { max-height: 100% !important; top: 0; }
Outras dicas
Você deve usar um cronômetro para trazer novas imagens continuamente em vez de um loop infinito.Verifica a setTimeout()
função.A ressalva é que você deve chamá-lo em uma função que chame a si mesmo, para que ele espere novamente.Exemplo retirado de w3escolas:
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>
O código a seguir definirá um intervalo e definirá a imagem para a próxima imagem de uma matriz de fontes de imagem a cada segundo.
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);
Em vez de usar um loop infinito, crie um cronômetro que continue disparando a cada n segundos - você obterá o aspecto de 'executar para sempre' sem travar o navegador.
Talvez tente usar um cronômetro que recupere a próxima imagem cada vez que ela passa, infelizmente não conheço nenhum JavaScript, então não posso fornecer um exemplo de código
Se for adequado ao seu caso, você pode continuar carregando novas imagens para responder à interação do usuário, como este site faz (basta rolar para baixo).
Apenas uma resposta formal:
var i = 0;
while (i < 1) {
do something...
if (i < 1) i = 0;
else i = fooling_function(i); // must return 0
}
Acho que nenhum navegador detectaria essas coisas.
function foo() {
alert('hi');
setTimeout(foo, 5000);
}
Em seguida, basta usar uma ação como "onload" para iniciar 'foo'