Michael Klose: Seitenhöhe, Scrollposition, sichtbaren Bereich ermitteln

Beitrag lesen

Hallo,

Mein Problem mit der Anzeige / dem Verstecken von Ebenen habe ich nun lösen können (Dank an Philipp, der mich in die richtige Richtung gebracht hat). Allerdings komme ich beim Auslesen der Höhe der angezeigten Seite und des Vergleiches, ob man zum Ende oder Anfang der angezeigten Seite gescrollt hat, nicht so recht weiter.

Bevor ich auf mein Problem eingehe, entschuldigt bitte die Länge meines Postings.

So, nun zu meinem Problem:

Der Javascript-Code, der meine Vorstellungen umsetzen soll, sieht folgendermassen aus:

var Scrolling;

function Hoehe_Anzeigebereich_ermitteln ()
   {
     if (document.layers || (document.getElementById && !document.all))
       return parseInt (self.innerHeight);
     else
       if (document.all)
         return parseInt (document.body.clientHeight);
   }

function Seitenhoehe_ermitteln ()
   {
     if (typeof document.height != 'undefined')
       return window.document.height;
     else
     {
       var obj = getBody (window);
       return obj.scrollHeight;
     }
   }

function getBody (window)
   {
     return (window.document.compatMode && window.document.compatMode == "CSS1Compat") ? window.document.documentElement : window.document.body || null;
   }

function Sichtbarkeit_aendern (id, NNtype, IEtype, WC3type)
   {
     if (document.getElementById)
       eval ("document.getElementById(id).style.visibility = "" + WC3type + """);
     else
       if (document.layers)
         document.layers[id].visibility = NNtype;
       else
         if (document.all)
           eval ("document.all." + id + ".style.visibility = "" + IEtype + """);
   }

function Scrollposition_ermitteln ()
   {
     if (typeof window.pageYOffset != 'undefined')
       return window.pageYOffset;
     else
       if (typeof document.compatMode != 'undefined' && document.compatMode != 'BackCompat')
         return document.documentElement.scrollTop;
       else
         if (typeof document.body != 'undefined')
           return document.body.scrollTop;
   }

function Nach_Oben_scrollen (Geschwindigkeit)
   {
     var Hoehe_Anzeigebereich = Hoehe_Anzeigebereich_ermitteln ();
     var Seitenhoehe          = Seitenhoehe_ermitteln ();
     var Scrollposition       = Scrollposition_ermitteln ();

Navigation_ausgeben (Hoehe_Anzeigebereich, Seitenhoehe, Scrollposition);

Scrolling = window.setInterval ('parent.AnzeigeSeite.scrollBy (0,' + Geschwindigkeit + ');', 1);
   }

function Nach_Unten_scrollen (Geschwindigkeit, Hoehe_Anzeigebereich, Seitenhoehe)
   {
     var Hoehe_Anzeigebereich = Hoehe_Anzeigebereich_ermitteln ();
     var Seitenhoehe          = Seitenhoehe_ermitteln ();
     var Scrollposition       = Scrollposition_ermitteln ();

Navigation_ausgeben (Hoehe_Anzeigebereich, Seitenhoehe, Scrollposition);

Scrolling = window.setInterval ('parent.AnzeigeSeite.scrollBy (0,' + Geschwindigkeit + ');', 1);
   }

function Scrolling_beenden ()
   {
     if (Scrolling)
       window.clearInterval (Scrolling);
   }

function Navigation_ausgeben (Hoehe_Anzeigebereich, Seitenhoehe, Scrollposition)
   {
     if (Scrollposition < Seitenhoehe)
       Sichtbarkeit_aendern ('Runter', 'show', 'visible', 'visible');
     else
       Sichtbarkeit_aendern ('Runter', 'hidden', 'hidden', 'hidden');

if (Seitenhoehe > Hoehe_Anzeigebereich)
       Sichtbarkeit_aendern ('Runter', 'show', 'visible', 'visible');
     else
       Sichtbarkeit_aendern ('Runter', 'hidden', 'hidden', 'hidden');
   }

Mein Problem ist nun, dass die Werte nicht richtig ausgelesen werden, weil ich beim Aufrufen jeder Seite immer nur die Navigationselemente zum Hochscrollen habe, nicht aber zum Runterscrollen.

Ich bin schon froh, dass ich überhaupt so weit gekommen bin und die Seiten aufrufen kann, ohne eine Fehlermeldung zu erhalten, aber die richtige Anzeige der Steuerungselemente sollte auch noch funktionieren.

Ich hoffe, Ihr könnt mir bei der Lösung dieses Problemes behilflich sein.

Vielen Dank im voraus für Eure Unterstützung.
Gruss, Michael