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?

Foi útil?

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'

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top