Бесконечный цикл в JavaScript, который не вызывает предупреждение браузером - PullRequest
1 голос
/ 15 сентября 2008

Я отображаю набор изображений в виде наложения с помощью Google Maps. Отображение этих изображений должно происходить в бесконечном цикле, но большинство браузеров обнаруживают это и отображают предупреждение.

Есть ли способ сделать бесконечный цикл в JavaScript, чтобы браузер не останавливал его и не предупреждал?

Ответы [ 8 ]

8 голосов
/ 15 сентября 2008

Попробуйте setInterval или setTimeout .

Вот пример:

(show = (o) => setTimeout(() => {

  console.log(o)
  show(++o)

}, 1000))(1);
.as-console-wrapper { max-height: 100% !important; top: 0; }
3 голосов
/ 15 сентября 2008

Вы должны использовать таймер для непрерывного получения новых изображений вместо бесконечного цикла. Проверьте функцию setTimeout(). Предостережение заключается в том, что вы должны вызывать его в функции, которая вызывает себя, чтобы он снова ждал. Пример взят из 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>
2 голосов
/ 15 сентября 2008

Следующий код установит интервал и установит изображение для следующего изображения из массива источников изображений каждую секунду.

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);
1 голос
/ 15 сентября 2008

Вместо использования бесконечного цикла, сделайте таймер, который будет срабатывать каждые n секунд - вы получите аспект «бежать навсегда» без зависания браузера.

0 голосов
/ 15 сентября 2008

Просто формальный ответ:

var i = 0;

while (i < 1) {
   do something...

   if (i < 1) i = 0;
   else i = fooling_function(i);  // must return 0
}

Я думаю, что ни один браузер не обнаружит такие вещи.

0 голосов
/ 15 сентября 2008

Если это соответствует вашему случаю, вы можете продолжать загружать новые изображения, чтобы реагировать на взаимодействие с пользователем, например , этот сайт делает (просто прокрутите вниз).

0 голосов
/ 15 сентября 2008
function foo() {
  alert('hi');
  setTimeout(foo, 5000);
}

Тогда просто используйте действие типа "onload", чтобы запустить 'foo'

0 голосов
/ 15 сентября 2008

Возможно, попробуйте использовать таймер, который извлекает следующее изображение каждый раз, когда он тикает, к сожалению, я не знаю JavaScript, поэтому не могу предоставить пример кода

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...