Чтобы показать прогресс загрузки изображения, вам нужно подключиться к событию onload
для изображений, чтобы вы могли отслеживать, когда их загрузка фактически завершена. Изображения загружаются асинхронно, поэтому назначение .src
только НАЧИНАЕТ загрузку изображения. Он не завершается до тех пор, пока не будет вызван обработчик onload
. Из-за этого существующий код просто сразу покажет «выполнено», потому что он не отслеживает, когда изображения фактически загружаются.
Кроме того, вы последовательно присваивали новое значение .src
тому же объекту изображения, который собирается прервать загрузку предыдущего изображения. Вам нужно создать новый объект изображения для каждого нового загружаемого изображения.
Вы можете исправить свой код следующим образом:
<div id="preloader">
<span id="preloader_status"> </span>
<script language="JavaScript">
var imageSrcs = [
"bigimage.gif",
"anotherbigimage.gif"
/* and so on */
];
function preloadImages(list, statusID) {
var img, cnt = 0;
var progress = document.getElementById(statusID);
var preloads = [];
for (var i = 0; i < list.length; i++) {
img = new Image();
img.onload = function() {
++cnt;
var loadPercent = Math.round(100*(cnt/list.length));
progress.innerHTML = loadPercent;
if (cnt == list.length) {
progress.innerHTML = "done";
}
}
img.src = list[i];
preloads.push(img);
}
}
preloadImages(imageSrcs, "preloader_status");
</script>
</div>