style.top hat keine Werte

Bitzi

Grünschnabel
Hi
Ich hab mir ein kleines Menü gemacht, welches Links ist und immer mit dem Fenster mitscrollt. Allerdings funktioniert das irgendwie nicht, weil wenn ich per getElementById("Nav").style.top (bei mir getElem(..) von der dhtml.js aus SelfHTML -> Link gibts ganz unten) die Daten auslese, bekomme ich nur leere variablen. Deshalb bleibt das Menü immer an der gleichen Stelle.

Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ch" lang="ch">
<head>
  <title>Jugi-Uwil</title>
   <link rel="stylesheet" type="text/css" href="index_dateien/css.css">
   <script src="index_dateien/dhtml.js" type="text/javascript"></script>
  <script src="index_dateien/layout.js" type="text/javascript"></script>
</head>
<body onload="CBClock(); window.setInterval('CBNavigation()', 1000);">
  <div id="Nav">
    <img src="index_dateien/navigation.png" border="0" alt="Navigation" />
      <div id="NavLinks"><a class="nav" href="http://localhost/jugi-uwil/index.php?sec=admin">Administration</a><br>
    </div>
  </div>
  <br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
                <br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
                <br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
                <br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
                <br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
</body></html>

Code:
function CBNavigation()
{
	ScrollY = CBPageYOffset();
  NavY		= CBGetNavYPos();

  if(NavY < ScrollY+100)
  {
  	CBSetNavYPos((ScrollY-NavY+100)*2);
  }
  else if(NavY > ScrollY+100)
	{
  	CBSetNavYPos((NavY-ScrollY+100)*2);
  }
}

function CBGetNavYPos()
{
	if(DOM)
  	return getElem("id", "Nav", null).style.top;
  else if(OP)
		return getElem("id", "Nav", null).style.pixelTop;
  else if(NS)
  	return getElem("id", "Nav", null).top;
}

function CBSetNavYPos(pos)
{
	if(DOM)
  	getElem("id", "Nav", null).style.top = pos;
 	else if(OP)
  	getElem("id", "Nav", null).style.pixelTop = pos;
 	else if(NS)
  	getElem("id", "Nav", null).top = pos;
}

function CBPageYOffset()
{
	if(MS)
  	return document.body.scrollTop;
  else
  	return window.pageYOffset;
}

Code:
#Nav 			{ position:absolute; top:50px; left:0; }
#NavLinks { position:absolute; top:42px; left:35px; }

Die getElem(..) sind aus der dhtml.js von SelfHTML und die gibts bei http://selfhtml.teamone.de/dhtml/beispiele/anzeige/dhtml.htm
Als Link gibts das ganze unter http://web80.essen082.server4free.de/jugi-uwil/index.html .
Schon mal danke im vorraus :)
 
Zuletzt bearbeitet:
Hallo...

Oh ja.. das hat mich auch schon so einige Nerven gekostet:)

Du musst die Top-Angabe direkt im "Nav"-<div> notieren, sonst findet sie Javascript nicht. Frag mich aber nicht, warum das so ist.

Dann gibt es noch ein anderes Problemchen in CBNavigation...
wenn du dir von einem Element Pixelwerte holst, solltest du diese, bevor du damit rechnest, mit parseInt() bearbeiten.
Je nach Brauser wird dir dort nämlich im Zweifelsfall "px" rangehangen... da liefern weitere Berechnungen immer ein"NaN"....mit parseInt() wird das "px" entfernt,falls vorhanden.
Code:
function CBNavigation()
{
	ScrollY  = parseInt(CBPageYOffset());
        NavY    = parseInt(CBGetNavYPos());
        //.....
}

P.S.: Schön, eine solch detaillierte Problembeschreibung zu bekommen...kommt selten genug vor....da hilft man gerne :)
 

Neue Beiträge

Zurück