kaspar: document.images.length mit Layern

Hallo Forum,

ich probiere jetzt schon ein Weilchen rum und sehe nun wohl den Wald vor lauter Bäumen nicht.
Ich möchte auf einer Seite, auf der etliche Layer mit Bildern sind, den Status des Ladezustandes abfragen und erst dann den Layer "Blende", der zuvor alles überdeckt, unsichtbar machen. Mir ist klar, dass man in Netscape 4.7 (PC und Mac) die Layer anders ansprechen muss als unter IE. Ich halte meine Variante eigentlich für ganz akzeptabel, leider funktioniert sie nicht (auf Netscape 4.7 (Windows2000)) . Es gibt auch keine Consolenfehlermeldungen. Irgendwelche Tipps?

------------CODE ANFANG-----------------------
if (document.layers)
var layerlaenge = document.layers.length;

function BildCheckNC() {
var zaehler1 = 0;
var zaehler2 = 0;
  for (z = 0; z < layerlaenge; z++)
  {
   for(m = 0; m < document.layers[z].document.images.length; m++)
    {
    if(document.layers[z].document.images[m].complete == true)
    {
     zaehler1++;
     if (zaehler1 == document.layers[z].document.images.length)
     {
     zaehler2++;
     }
    }
    else
    {
    document.layers["Blende"].visibility = "hide";
    }
    }
   }
   if (zaehler2 == layerlaenge)
   {
   document.layers["Blende"].visibility = "show";
   }
}

if (document.layers)
window.setInterval("BildCheckNC()",3000);

---------------CODE ENDE------------------------

Dank an jeden, der sich meines Problemes annimmt,
Gruß: kaspar

  1. Hi there!

    Ich halte meine Variante eigentlich für ganz akzeptabel, leider funktioniert sie nicht (auf Netscape 4.7 (Windows2000)).

    Was heisst funktioniert nicht? Die Blende wird nie weggenommen oder was?

    ------------CODE ANFANG-----------------------
    if (document.layers)
    var layerlaenge = document.layers.length;

    Wo steht denn dieser Code? Wenn der im Sourcecode kommt, bevor alle Layer geladen sind, stimmt natuerlich die Anzahl der Layer nicht. So auf den ersten Blick sollte Dein Code dann aber die Blende umso eher wegnehmen, aber vielleicht habe ich was uebersehen, weil Deine Formatierung die Sache ziemlich schwer lesbar macht.

    function BildCheckNC() {
    var zaehler1 = 0;
    var zaehler2 = 0;

    Vielleicht etwas aussagekraeftigere Variablennamen?

    if (document.layers)
    window.setInterval("BildCheckNC()",3000);

    DO NOT! Zumindest nicht, ohne das Intervall zu gegebener Zeit auch wieder zu loeschen. Nicht nur, dass dadurch der Prozessor des Besuchers sinnlos belastet wird (ja ok, alle 3 Sekunden faellt nicht so auf), vor allem aber hat Netscape 4 bei setInterval und setTimeout ein schlimmes Memory leak, was dazu fuehrt, das ueber kurz oder lang der ganze Speicher zugemuellt wird.

    So long

    1. Hallo,

      erst einmal schönen Dank für Deine Tipps.

      Ich halte meine Variante eigentlich für ganz akzeptabel, leider funktioniert sie nicht (auf Netscape 4.7 (Windows2000)).

      Was heisst funktioniert nicht? Die Blende wird nie weggenommen oder was?

      richtig

      if (document.layers)
      var layerlaenge = document.layers.length;

      Wo steht denn dieser Code? Wenn der im Sourcecode kommt, bevor alle Layer geladen sind, stimmt natuerlich die Anzahl der Layer nicht. So auf den ersten Blick sollte Dein Code dann aber die Blende umso eher wegnehmen

      Das sehe ich genauso, tut er aber nicht.

      function BildCheckNC() {
      var zaehler1 = 0;
      var zaehler2 = 0;

      Vielleicht etwas aussagekraeftigere Variablennamen?

      Da wird gezählt, soll ich sie Cindy und Bert nennen? ;-)
      Selbst Gott Münz benutzt solche Variablenname, wenn ich mich recht entsinne.

      if (document.layers)
      window.setInterval("BildCheckNC()",3000);

      DO NOT! Zumindest nicht, ohne das Intervall zu gegebener Zeit auch wieder zu loeschen. Nicht nur, dass dadurch der Prozessor des (...)

      O.K., interessante Information. Löst aber leider alles mein Problem nicht.

      Trotzdem danke an Dich und außerdem alle, die mir weitere Anhaltspunkte geben können.

      Gruß: kaspar

      1. Hallo nochmal,

        if (document.layers)
        var layerlaenge = document.layers.length;

        Wo steht denn dieser Code? Wenn der im Sourcecode kommt, bevor alle Layer geladen sind, stimmt natuerlich die Anzahl der Layer nicht. So auf den ersten Blick sollte Dein Code dann aber die Blende umso eher wegnehmen

        Das sehe ich genauso, tut er aber nicht.

        Ähm, räusper *schäm*: Daran lag es wohl doch. Ich habe die Variable jetzt in Anlehnung an Deine Bemerkung erst via onLoad definiert und jetzt geht es :-)

        Nichts für ungut, nochmals danke und Gruß:

        kaspar

      2. Hi again!

        Vielleicht etwas aussagekraeftigere Variablennamen?
        Da wird gezählt, soll ich sie Cindy und Bert nennen? ;-)

        Das haette auf jeden Fall einen erheblich hoeheren Coolness-Faktor. ;-)

        Selbst Gott Münz benutzt solche Variablenname, wenn ich mich recht entsinne.

        Na das heisst doch aber nicht unbedingt, dass das so gut ist.

        So long