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

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

  1. hi,

    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.

    was _willst_ du denn mit dieser information?

    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.

    ganz nach oben komme ich mit der [pos-1]-taste, ganz nach unten mit [ende].

    wozu jemand dafür zusätzliche "steuerungselemente" einbauen will, ist mir absolut schleierhaft.

    zu wenig inhalte auf der seite, sieht's ohne solche elemente "zu leer" aus?

    oder willst du anderen leuten zeigen, wie toll du mit javascript umgehen kannst?
    tipp: zeige ihnen, wie _verantwortlich_ du mit javascript umgehen kannst - in dem du es da wo's sinnvoll ist einsetzt, und auf solche unnötigen gimmicks verzichtest.

    gruß,
    wahsaga

    --
    "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
    1. Hallo Wahsaga,

      wozu jemand dafür zusätzliche "steuerungselemente" einbauen will, ist mir absolut schleierhaft.

      Wir könnten so etwas doch auch hier im Forum einbauen, so dass man das erste Posting erst verfassen kann, wenn man bei den </faq> mal ganz nach unten gescrollt und dann ein Cookie akzeptiert hat. ;-)

      Gruß Gernot