Christian Huff: "Kleinere" Schwierigkeiten in Netscape

Hallo! Ich hab folgendes seltsames Problem, es dreht sich um folgendes Objekt:

<DIV CLASS="fliege" ID="drache">
<img src="dragon_rechts.gif" name="flatter">
</DIV>

welches per CSS so definiert ist:
.fliege {position:absolute; top:150; left:2; height:40; width:50; z-index:0; visibility:visible;}

So weit, so gut, wird auch von IE und NN richtig interpretiert... Jetzt soll diese DIV über den Bildschirm wandern, und nachdem es ein Maximum erreicht hat, umdrehen und seine SRC ändern. Aus dem Grund hab ich in JavaScript folgende Functionen geschrieben:

n=1; //das ist der Startwert der X-Koodinate //
da = screen.availWidth - 229; //das ganze findet in einem Frame statt, deshalb Abzug eines Werts//
direk = 1; //das ist die Startrichtung //
browser=navigator.appName;

flatterrechts=new Image();
flatterlinks=new Image();

flatterrechts.src="dragon_rechts.gif";
flatterlinks.src="dragon_links.gif";

function main()
{ if (browser=='Microsoft Internet Explorer')
{
  document.all.drache.style.left = n;
  richtung();
}
else
{
  document.drache.left = n;
  richtung();
}
}

function richtung()
{

if (n>da)
  {
  direk=-1;
  links('flatter')
  }
  if (n<-50)
  {
  direk=1;
  rechts('flatter')
  }
  bewege(n+direk)
}
function bewege(m)
{ if (browser=='Microsoft Internet Explorer')
{
  document.all.drache.style.left = m;
  n = m;
  window.setTimeout("richtung()",50);
}
else
{
  document.drache.left = m;
  n = m;
  window.setTimeout("richtung()",50)
}
}
function links(bild)
{
  linksbild = eval(bild + "links.src");
  document[bild].src = linksbild;
}

function rechts(bild)
{
  rechtsbild = eval(bild + "rechts.src");
  document[bild].src = rechtsbild;
}

Dieser Quelltext führt im Internet Explorer 5 zu korrekter Darstellung, nur im Netscape 4.6 weigert sich das Bild zu wechseln, und hält wegen JavaScriptError auch noch gleich an...

Die Funktionen 'rechts(bild)' und 'links(bild)' funktionieren aber im Netscape, solange das zu wechselde Bild nicht in einer DIV ist...

Ist das eine Schikane von Netscape und muß ich damit leben, oder geht das irgendwie anders? Ich weiß, daß ich <layer> verwenden könnte, was ich aber nicht will!

Unter dem Link kann man sich das ganze mal anschauen...

Christian Huff

  1. Hi erstmal.....

    function main()
    { if (browser=='Microsoft Internet Explorer')

    einfacher: if (document.all)

    document.all.drache.style.left = n;

    Fehler1:
    style.left is ein String-Wert. Das numerische pendant ist pixelLeft. Richti wäre also der Ausdruck

    document.all.drache.style.pixelLeft = n;

    document.drache.left = n;

    Fehler2: Der Layer muß richtig adressiert werden:
    document.layers.drache.left=n         oder
    document.layers['drache'].left=n

    document.all.drache.style.left = m;

    Siehe Fehler1

    document.drache.left = m;

    Siehe Fehler2

    Ist das eine Schikane von Netscape und muß ich damit leben, oder geht das irgendwie anders? Ich weiß, daß ich <layer> verwenden könnte, was ich aber nicht will!

    Netscape is ne ecke umständlicher als IE4/5, aber wenn man die Syntax richtig beachtet, gehts auch ,-)

    Gruß,
    Carsten

    1. Vielen Dank, jetzt klappt alles einwandfrei...

  2. Moin Christian,

    Die Funktionen 'rechts(bild)' und 'links(bild)' funktionieren aber im Netscape, solange das zu wechselde Bild nicht in einer DIV ist...

    Ist das eine Schikane von Netscape und muß ich damit leben, oder geht das irgendwie anders? Ich weiß, daß ich <layer> verwenden könnte, was ich aber nicht will!

    Das liegt an der unterschiedlichen Verwaltung von images in <div>'s von IE und Netscape. Ein ausführlicher Beitrag hierzu findet sich im Archiv:

    <../../sfarchiv/1999_1/t01931.htm#a8805>

    Bis dannundwann...

    Andreas

    1. Danke hat mir sehr geholfen... jetzt klappt alles!