Я не думаю, что цикл for
применяется здесь из-за асинхронного характера того, что вы хотите.
Давайте подумаем о поведении:
# psuedocode
choose the next image
set image src
when the image has loaded
wait one second
loop from line #1
Реализация этой логики
Другие ответы здесь использовали setInterval
. По моему мнению, вы должны избегать setInterval
в максимально возможной степени и использовать setTimeout
с циклом самоссылки.
1020 * рассмотреть *
function doSomethingIntesive() {
...
}
setInterval(doSomethingIntesive, 1000)
вы хотите звонить doSomethingIntensive
каждую секунду. Что произойдет, если выполнение doSomethingIntensive
займет более 1 секунды? В вашем случае doSomethingIntensive
будет "скачать изображение и показать его". При медленном соединении это определенно может занять больше 1 секунды.
теперь рассмотрим
function doSomethingIntensive() {
...
setTimeout(doSomethingIntensive, 1000)
}
setTimeout(doSomethingIntensive, 1000) // or just doSomethingIntensive() if you don't want the initial wait
Этот код полностью выполняет интенсивную операцию , а затем ставит в очередь новый вызов интенсивной функции. Вы в конечном итоге с гораздо более последовательным поведением.
хитрый трюк заключается в том, чтобы использовать «виртуальное» изображение для загрузки изображения перед его применением к элементу real dom - используя преимущества кэширования в браузере.
Откройте инструменты разработчика вашего браузера и включите регулирование соединения. Первое изображение может появиться некоторое время, но вы никогда не увидите пустое (нет) изображение. ... хотя это может быть за то, что вам нужно для этого.