Я отображаю набор изображений в виде наложения с помощью Google Maps. Отображение этих изображений должно происходить в бесконечном цикле, но большинство браузеров обнаруживают это и отображают предупреждение.
Есть ли способ сделать бесконечный цикл в JavaScript, чтобы браузер не останавливал его и не предупреждал?
Попробуйте setInterval или setTimeout .
Вот пример:
(show = (o) => setTimeout(() => { console.log(o) show(++o) }, 1000))(1);
.as-console-wrapper { max-height: 100% !important; top: 0; }
Вы должны использовать таймер для непрерывного получения новых изображений вместо бесконечного цикла. Проверьте функцию setTimeout(). Предостережение заключается в том, что вы должны вызывать его в функции, которая вызывает себя, чтобы он снова ждал. Пример взят из w3schools :
setTimeout()
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>
Следующий код установит интервал и установит изображение для следующего изображения из массива источников изображений каждую секунду.
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);
Вместо использования бесконечного цикла, сделайте таймер, который будет срабатывать каждые n секунд - вы получите аспект «бежать навсегда» без зависания браузера.
Просто формальный ответ:
var i = 0; while (i < 1) { do something... if (i < 1) i = 0; else i = fooling_function(i); // must return 0 }
Я думаю, что ни один браузер не обнаружит такие вещи.
Если это соответствует вашему случаю, вы можете продолжать загружать новые изображения, чтобы реагировать на взаимодействие с пользователем, например , этот сайт делает (просто прокрутите вниз).
function foo() { alert('hi'); setTimeout(foo, 5000); }
Тогда просто используйте действие типа "onload", чтобы запустить 'foo'
Возможно, попробуйте использовать таймер, который извлекает следующее изображение каждый раз, когда он тикает, к сожалению, я не знаю JavaScript, поэтому не могу предоставить пример кода