Phil: Prüfen ob ein bild komplet geladen ist.

Ich würde gerne nach dem drücken eines Knopfes eine Bild in einem externen Fenster anzeigen. Dieses Fenster soll ein kleines bißchen größer als das fenster sein. Dazu nehme ich die die Größe des Bildes und passe mein Fenster dieser an.

Nun zum Problem:
Wenn das bild groß ist und lange geladen wird, habe ich das problem, das die Größen angabe im Bild als 0 angenommen werden.

xsize = bild.width;
ysize = bild.height;

haben nun den Wert 0.

Gibt es jetzt ein möglichkeit darauf zu warten, das das komplette Bild geladen ist.

Mit diesem Code geht es nicht:
bild.src = bildname;
while(bild.complete == true)
{
//warten
}

//Anweisungen..

  1. Lieber Phil,

    wenn das Bild im Browser noch nicht geladen ist, dann haben bild.width und bild.height den Wert 0. In diesem Falle solltest Du dem Bild einen Eventhandler geben, der im Falle des Geladen-habens eine Funktion aufruft, die dann etwas tut. Wenn bild.width und bild.height != 0 sind, dann ist das Bild im Browsercache vorhanden (also geladen).

    In meinem js_popup habe ich genau das auch gebraucht. Dabei habe ich mir eine Funktion zum Hinzufügen oder Entfernen von Eventhandlern geschrieben, die die browserspezifischen Unterschiede dieser Implementierung ausbügelt. Schau mal rein! ;-)

    Liebe Grüße aus Ellwangen,

    Felix Riesterer.

    1. Danke. Gute Idee. Ich werde das mal weiter duch denken.

  2. Gibt es jetzt ein möglichkeit darauf zu warten, das das komplette Bild geladen ist.

    Ja.

    bild.onload = function()
    {
    alert('Fertig\n\n' + this.src)
    }

    Struppi.

    1. Danke. Echt super Lösung.

    2. Tag,

      Gibt es jetzt ein möglichkeit darauf zu warten, das das komplette Bild geladen ist.

      Ja.

      bild.onload = function()
      {
      alert('Fertig\n\n' + this.src)
      }

      Ebenso gibt es die Funktion "onerror", die aufgerufen wird, wenn das Bild nicht geladen werden kann.

        
      bild.onerror = function () {  
        alert("hat nicht funktioniert");  
      }  
      
      

      Grüße,
      Steffen.