M.S.: Layers für Internet-Explorer

Hi !

Kann mir jemand helfen, dieses Script, das nur mit
Netscape läuft, umzuschreiben, dass es auch für den
Internet-Explorer läuft ?
Ich schaffe das einfach nicht.

Danke !

Martin

<html>
<script>
<!--
var w=150;
function layer ()
{
        w++;
        document.layers.init.left = w;
        setTimeout ("layer()", 100);
}
setTimeout ("layer()", 100);
//-->
</script>
<layer name="init" top=150 left=200>
<img src="bild.gif">
</layer>
</html>

  1. hi

    Kann mir jemand helfen, dieses Script, das nur mit
    Netscape läuft, umzuschreiben, dass es auch für den
    Internet-Explorer läuft ?

    angenehm, mal der imgekehrte Weg. Übrigens tut DAS da nurr in Netscape 4.

    var w=150;
    function layer ()
    {
            w++;
            document.layers.init.left = w;
            setTimeout ("layer()", 100);
    }
    setTimeout ("layer()", 100);
    //-->
    </script>
    <layer name="init" top=150 left=200>
    <img src="bild.gif">
    </layer>

    1. <layer> durch <div> ersetzen
    2. neben name="init" zusätzlich id="init" setzen (das name="" ist dann nur noch für Netscape4)
    3. die Zeile mit document.. tauschen gegen das hier:
    if(document.getElementById){
    document.getElementById("init").style.position = w + "px";
    }
    if(document.layers){
    document.layers.init.left = w;
    }

    gruss Kai

    1. Das funktioniert leider nicht, weil ich in JavaScript nicht auf
      document.layers zugreifen kann, da es im HTML-Dokument keinen Layer
      gibt. Er heißt ja jetzt div.
      Gibt es vielleicht eine andere Lösung, Layers im Internet-Explorer
      darzustellen und mit JavaScript die Position zu verändern ?

      var w=150;
      function layer ()
      {
              w++;
              if (document.getElementById)
                      document.getElementById("init").style.position = w + "px";
              if (document.layers)
                      document.layers.init.left = w;
              document.layers.init.left = w;

      setTimeout ("layer()", 100);
      }
      setTimeout ("layer()", 100);

      <div name="init" id="init" top=150 left=200>
      <img src="images/bartman.gif">
      </div>

      1. Das funktioniert leider nicht, weil ich in JavaScript nicht auf
        document.layers zugreifen kann, da es im HTML-Dokument keinen Layer
        gibt. Er heißt ja jetzt div.

        so hast du das auch falsch verstanden.

        function layer ()
        {
                w++;
                if (document.getElementById)
                        document.getElementById("init").style.left = w + "px";
                if (document.layers)
                        document.layers.init.left = w;
                if (document.all)
                        document.init.style.left = w + "px";

        setTimeout ("layer()", 100);
        }

        so war das gedacht. Das ganze prüft, ob der Browser schonmal was von "document.getElementById" gehört hat (ist heutzutage üblich). Wenn nicht wird getestet, ob es "document.layers" gibt (was NUR bei Netscape 4.xx der Fall ist). Abhängig von den beiden wird jeweils ein unterschiedlicher Befehl ausgeführt. Hinten dran hängt noch die Variante für den IE4.0/win
        Netscape 4 ist es dabei egal, ob das Tag selbst <div> oder <layer> heißt, Hauptsache es ist absolut positioniert (was bei einem Layer automatisch ist).
        Mit der Konstruktion bewegt sich die Ebene damit jetzt in Netscape 4.xx, IE4/win, IE5/win, IE5.5/win, IE6/win, IE5/mac, IE5.1/mac, Mozilla, konqueror 2.x, konqueror 3.x, Netscape 6.x, Opera 5.x, Opera 6.x. - hab ich noch wen vergessen?  evtl. iCab, OmniWeb, IE4/mac, IE4.5/mac..?

        gruss Kai

        1. Funktioniert aber trotzdem nicht mit div.
          Ist das OK, wenn ich in den Layer das div setze ?

          <layer name="init"><div id="init" name="init"><img....>
          </div></layer>

          ?

          So funktioniert es nämlich mit dem Netscape.
          Hier der vollständige Code, der bei beiden funktioniert,
          mit dem Nachteil jedoch, dass Netscape den y-Wert vom Layer immer zu
          dem y-Wert vom Div dazuaddiert. Deshalb lasse ich bei dem Layer
          den y-Wert weg.
          Gibt es da nicht eine andere Möglichkeit, als Div im Layer ?

          var w=150;
          function layer ()
          {
                  w++;
                  if (document.getElementById)
                          document.getElementById("init").style.setAttribute ("left", w+"px", "false");
                  if (document.layers)
                          document.layers.initl.left = w;
                  if (document.all)
                          document.all.init.style.setAttribute ("left", w+"px", "false");

          setTimeout ("layer()", 100);
          }
          setTimeout ("layer()", 100);

          <layer name="initl">
          <div name="init" id="init" style="position:absolute;top:150px;left:200px;">
          <img src="images/bartman.gif">
          </div>
          </layer>

          1. Funktioniert aber trotzdem nicht mit div.
            Ist das OK, wenn ich in den Layer das div setze ?

            <layer name="init"><div id="init" name="init"><img....>
            </div></layer>

            naja..

            So funktioniert es nämlich mit dem Netscape.
            Hier der vollständige Code, der bei beiden funktioniert,
            mit dem Nachteil jedoch, dass Netscape den y-Wert vom Layer immer zu
            dem y-Wert vom Div dazuaddiert. Deshalb lasse ich bei dem Layer
            den y-Wert weg.

            das ist genaus das Problem :)

            imho. kann Netscape 4 auch <div>s bewegen.. versucht mal document.init.left = w;

            gruss Kai

            1. Waaaaaaas ???

              Das klappt ja doch ;-)

              Ich habe es zuerst versucht, den HTML-Code dynamisch zu erstellen,
              je nach Browser div oder layer einzufügen, aber jetzt klappt es sogar
              schon ohne layer. Ich frage mich echt, wozu layers überhaupt da sind.

              Danke ! Das hat geklappt. Hier der HTML-Code:

              <html>
              <script>
              <!--
              var w=150;
              function layer ()
              {
                      w++;
                      if (document.getElementById)
                              document.getElementById("init").style.setAttribute ("left", w+"px", "false");
                      if (document.layers)
                              document.init.left = w;
                      if (document.all)
                              document.all.init.style.setAttribute ("left", w+"px", "false");

              setTimeout ("layer()", 100);
              }
              setTimeout ("layer()", 100);
              //-->
              </script>
              <div name="init" id="init" style="position:absolute;top:150px;left:200px;">
              <img src="images/bartman.gif">
              </div>
              </html>

              1. hi

                Ich habe es zuerst versucht, den HTML-Code dynamisch zu erstellen,
                je nach Browser div oder layer einzufügen, aber jetzt klappt es sogar
                schon ohne layer. Ich frage mich echt, wozu layers überhaupt da sind.

                na also - freut mich dir geholfen zu haben :)

                <layer>s sind heutzutage eigentlich zu gar nichts mehr da, außer vielleicht, wenn man für Netscape 4 einen <iframe> simulieren will. Damals war aber CSS2 noch nicht offiziell und so meinte man bei Netscape eben seine eigene Eltwicklung in diesem Bereich bringen zu müssen. Das ging aber massivst nach hinten los...

                gruss Kai