Javascript Image After Loader

4 user3154030 [2014-01-02 17:55:00]

Итак, я пишу javascript, который заменяет изображение по умолчанию, которое заполняет пространство для многочисленных изображений на моей веб-странице. Таким образом, страница загружается намного быстрее. (script отображается с загрузкой тела), все изображения по умолчанию имеют один и тот же класс, а их идентификатор равен их имени файла.

function imgPostLoad(totalpics, placeholder) {
    var img = document.createElement('img');
    for (var i = 0; i < totalpics; i++) {
        var picture = document.getElementsByClassName(placeholder)[i];
        img.onload = function (evt) {
            picture.src = this.src;
            picture.width = this.width;
            picture.height = this.height;
        }
        img.src = "/img/" + picture.getAttribute("id") + ".jpg";
    }
}

Он работает, но только для последнего последнего изображения в массиве. Остальные изображения остаются неизменными. Что с ним не так?

javascript for-loop image onload


4 ответа


1 Решение putvande [2014-01-02 18:05:00]

Вы просто можете сделать:

function imgPostLoad(totalpics, placeholder) {
    for (var i = 0; i < totalpics; i++) {
        var picture = document.getElementsByClassName(placeholder)[i];
        picture.src = "/img/" + picture.getAttribute("id") + ".jpg";
    }
}

В чем проблема вашего кода, так это то, что к моменту img была загружена picture другая переменная.


0 Filling The Stack is What I DO [2014-01-02 18:41:00]

Собственно, было бы проще написать это так.

function imgPostLoad() {

     var placeHolders = document.body.querySelectorAll('.placeholder');

    for (var i = 0; i < placeHolders.length; i++) {

        placeHolders[i].src = "/img/" + placeHolders[i].getAttribute("id") + ".jpg";
    }
}

0 cumul [2014-01-02 18:26:00]

function imgPostLoad(placeholder) {
    var allPictures = document.getElementsByClassName(placeholder);
    for (var i = 0; i < allPictures.length; i++) {
        var picture = allPictures[i];
        picture.src = "/img/" + picture.getAttribute("id") + ".jpg";
    }
}

-1 frieder [2014-01-02 18:00:00]

создать элемент изображения в цикле for, подобный этому

function imgPostLoad(totalpics, placeholder){
    for (var i = 0; i < totalpics; i++){
        var img = document.createElement('img');
        var picture = document.getElementsByClassName(placeholder)[i];
        img.onload = function (evt) {
            picture.src=this.src;
            picture.width=this.width;
            picture.height=this.height;
        }
        img.src = "/img/" + picture.getAttribute("id") + ".jpg";
    }
}