Robert: javascript formel bei scrollendem menue

Hallo!
Ich habe ein scrollendes Menu erstellt. Diese fuktioniert in Mozilla, Internet-Explorer und netscape 4 und hoeher.
Es wäre möglich ein scrollendes Menü so zu erstellen das man ein Interval hat, welches immer wieder die position vom layer (menu) je nach Browser auf die von document.body.scrollTop oder document.documentElement.scrollTop oder ... stellt. Das sieht leider unschön aus da das menu von ort zu ort springt. also wollte ich es flüssiger ausschauen lassen und habe dafür gesorgt das es immer nur in teilen runter kommt. Also wenn der Layer auf top=4 ist und body.scrollTop auf 9 dann sorge ich dafür  das der layer immer nur ein vierzigstel von dem weg zu document.body.scrollTop hinter sich legt. So functioniert der Code:

menu.style ist jenach Browser eine Referenz auf das selbe objekt wie document.getElementById(...).style oder document.all[...].style oder document.layers[...]

^^^^^^^^
|||||||| ich weiß nicht ob das richtig ausgedrückt ist aber ich nehme an ihr versteht was ich meine, wenn nicht dann sagt es bitte dann versuche ich es anders auszudrücken.

hier nun die Idee:

window.setInterval("geh()",10);

function geh()
{
poslay=menu.style.top; //position vom layer

poslay=parseInt(poslay); //z.B. 120px in 120 um wandeln

posscroll=document.body.scrollTop; /* gescrollte position dieses beispiel funktionier nur mit dem IE und Mozilla aber das ist ja auch nciht das was ich bei meinem eigentlichen Code verwendet habe. */

menu.style.top = poslay   +  (posscroll-poslay)/40;    /* (posscroll-poslay) ist der Weg den der layer zurück legen muss. das /40 sorgt dafür das der layer immer nur ein 40stel zurücklegt. Dadurch wird es flüssiger?  */
}

Alles klappt in allen Browsern nur ein problem tritt auf
der Layer kommt beim runter scrollen nicht an die position von document.body.scrollTop oder document.documentElement.scrollTop oder ... .
Schaut bitte selbst, wenn ihr nicht wisst was ich meine.

http://ikt.bg9.at/~rchiryai/2.html

Wennn jemand meint, es lege daran das (posscroll-poslay)/40 eine kommerzahl ergibt, irrt er. Ich habe das (possscroll-poslay)/40 mit Math.round gerundet.

Ich weiß es ist nicht leicht zu verstehen, aber vielleicht hat schon jemand ein scrollender Menu gemacht und hat den selben fehler wie ich gemacht oder kann sich was darunter vorstellen.

Danke schonmal für Antworten
MFG Robert

  1. Hallo,

    Ich habe ein scrollendes Menu erstellt. Diese fuktioniert in Mozilla, Internet-Explorer und netscape 4 und hoeher.

    Alles klappt in allen Browsern nur ein problem tritt auf
    der Layer kommt beim runter scrollen nicht an die position von document.body.scrollTop oder document.documentElement.scrollTop oder ... .
    Schaut bitte selbst, wenn ihr nicht wisst was ich meine.

    http://ikt.bg9.at/~rchiryai/2.html

    Auszug:
    function scrolle(objekt)
    {
    poslay=objekt.top;
    poslay=parseInt(poslay);
    pos=bodyscrolltop();
    pos=parseInt(pos);
    komm=poslay+((pos-poslay)*0.03);
    komm=Math.round(komm);
    objekt.top=komm;
    }

    Inhalt von poslay ist die aktuelle obere Position des Objekts.
    Inhalt von pos ist die Position, wo es hin soll.

    Der Inhalt von komm ändert sich nur solange, wie Math.abs(pos-poslay)*0.03, gerundet noch einen Wert von 1px ergibt.

    x * 0.03 < 0.5
    x        < 0.5 / 0.03
    x        < 16.6666

    Sobald also ABS(pos-poslay) kleiner als 16px ist, ändert sich nichts mehr.

    Am einfachsten wäre, Du lässt den Bereich das letzte Stück springen:

    function scrolle(objekt)
    {
    poslay=objekt.top;
    poslay=parseInt(poslay);
    pos=bodyscrolltop();
    pos=parseInt(pos);
    komm=poslay+((pos-poslay)*0.03);
    //komm=Math.round(komm);
    komm=(Math.abs(pos-poslay)<0.5/0.03)?pos:Math.round(komm);
    window.status=pos + " " + komm + " " + poslay;
    objekt.top=komm + "px";
    }

    viele Grüße

    Axel

    1. So was ähnliches habe ich schon gemacht. Danke Trotzdem.
      Ich habe das Problem gelöst.

      Ab einem Zeitpunkt ist (pos-poslay)/40 gleich < 0.5 Ab diesem ist es nicht so das poslay um 0.4443242342 oder o.234234234 runterscrollt sonder es wird auf 0 gerunden und entsteht poslay + 0; also hört es auf zu scrollen. Gelöst habe ich das problem das aufgerundnet wird. dadurch ist es am ende immer poslay + 1;
      danke trotzdem dir die mühe gegeben zu haben meine Frage durchzulesen und mir eine lösung zu geben.

      PS: für alle die eine scrollendes Menu machen beim hinaufscrollen muss abgerudet und nicht aufgerundet werden.
      Danke
      MFG Robert