2016-05-09 21 views
0

ich ein paar Bildobjekte erstellen und wenn ich ein Setup Netzwerk Drosselung in Dev Tools I dass onload Funktionen sehen sind aufgerufen wird, bevor meine Bilder sind voll beladen.Bildobjekt onload Funktion Brennen sofort

Ich kann wirklich nicht die Lösung finden. Mein Code:

function imgObjects(data) { 
    for (var i in data) { 
     img[data[i].id] = new Image(); 
     img[data[i].id].onload = imgReady(); 
     img[data[i].id].name = data[i].name; 
     img[data[i].id].src = data[i].image; 
    } 
} 

function imgReady() { 
    imgReadyCount++; 
    console.log('Count: ', imgReadyCount); 
} 

ich Sie passieren die Antwort wissen Sie es bitte in Vanille js liefern, danke!

Antwort

2

Das Problem ist Ihre Event-Handler-Zuordnung.

img[data[i].id].onload = imgReady();//you call the function here 

Stattdessen sollte es

img[data[i].id].onload = imgReady; //note that the handle is stored 

werden, die vermeiden wird die Prozedur sofort anrufen und wird auch dann nicht zu einer undefinierten zu dem onload-Handler zugeordnet ist.

+0

ups, das habe ich verpasst, er hat diesem Ereignis nicht einmal eine Funktion zugewiesen, sondern die Funktion return. Leider kann er auch nach dem Korrigieren Probleme mit "sofortigen" Onload-Ereignissen haben. Weil, ... (siehe meine Erklärung unten). –

+0

Es hat sofort funktioniert! Danke Travis. – Bombel

0

ein Ereignis an den document hinzufügen;

document.addEventListener("DOMContentLoaded", function(event) { 
    //your code to run since DOM is loaded and ready 
}); 
0

"Image-Objekt onload Funktion Brennen sofort"

Das ist, weil Sie sie Vorbelastung. Das Onload-Ereignis wird ausgelöst, sobald die Bildquelle vollständig geladen wurde, unabhängig davon, ob sie noch verwaist sind, d. H .: nicht an den Dokumentbaum angehängt. Und natürlich gilt der Begriff "sofort" für die Tatsache, dass sie bereits eingelöst werden; und werden deshalb aus dem Geld gezogen - "sofort".

P. S .: Sie müssen sich aus reservieren Angabe der img.src bis Sie denken, Sie sind bereit, das Onload-Ereignis zu behandeln.

+0

Ich habe es tatsächlich mit deaktivierter Cache-Option getestet, so dass Caching nicht das Problem wäre, denke ich. Danke Bekim trotzdem! – Bombel