enrico: Auslesen der Scrollhöhe/Scrollweite (?)

Hallo,

ich scrolle einen Frame über eigene Schaltflächen (eine andere Variante ging
aufgrund des notwendigen Designs nicht) und möchte nun die Schaltflächen für
das Scrolling, je nach "Scrollweite" aktivieren bzw. deaktivieren, weil es
wenig Sinn macht, die Grafiken als aktive Links anzubieten, wenn man sich am
Anfang der Seite bzw. am Ende der Seite befindet.

Aktuell frage ich die Dokumentenlänge des Frames "Anzeige" mit folgender
Anweisung ab:

parent.Anzeige.document.body.offsetHeight

Die Scrollhöhe/Scrollweite (?) ermittle ich mit folgender Anweisung:

parent.Anzeige.document.body.scrollTop

Mir ist aber aufgefallen, dass ich unterschiedliche Werte erhalte:

offsetHeight = 4280
     scrollTop    = 3525

Diese Werte erhalte ich, wenn ich bis zum Ende der Seite gescrollt habe.

Sollte es - logischerweise - nicht so sein, dass beide Werte gleich sein
sollten, wenn ich zum Ende der Seite gescrollt habe?

Wie muß ich beim Firefox vorgehen, um die Scrollhöhe/Scrollweite korrekt
auslesen kann?

Vielen Dank im Voraus für Eure Unterstützung.

Gruß
enrico

  1. Hallo Enrico,

    offsetHeight = 4280
         scrollTop    = 3525

    Dein Anzeigebereich vom Browser war als 755 Pixel hoch...
    (Sonst noch Fragen, oder hilft Dir das auf die Sprünge? ;)

    Gruß aus Berlin!
    eddi

    1. Hallo eddi,

      erstmal Danke für Deine Rückantwort.

      Deine Feststellung über die Höhe des Anzeigebereiches meines Browsers hätte
      mir dann weitergeholfen, wenn folgende Abfrage auch zu einem Resultat führen
      würde:

      var Dokumentenhoehe = parent.Anzeige.document.body.offsetHeight;
         var Anzeigebereich  = parent.Anzeige.document.body.clientWidth;
         var Scrollweite     = parent.Anzeige.document.body.scrollTop;

      if ((Anzeigebereich + Scrollweite) < Dokumentenhoehe)
         {
            ...
         }
         else
         {
            alert ("Seitenende");
         }

      Anscheinend bin ich aber noch nicht auf der richtigen Spur... :-(

      Gruß
      enrico

      1. Guten Morgen,

        .offsetHeight;
        .clientWidth;

        also nochmal:
        GUTEN MORGEN!

        .offsetHEIGHT
        .clientWIDTH

        Wie war das nochmal mit Äpfeln und Birnen?
        (Es ist schon mitten in der Nacht. Gucke es Dir am besten morgen nochmal an. ;)

        Gute Nacht aus Berlin!
        eddi

        1. Hallo eddi,

          hä? Nun versteh ich gar nix mehr...

          Dieser Zustand ist sehr ungünstig, wenn ich mein Vorhaben umsetzen will...

          Nun ja, evtl. komme ich ja morgen ääähm heute weiter... :-)

          Gruß
          enrico

  2. Hi,

    Aktuell frage ich die Dokumentenlänge des Frames "Anzeige" mit folgender
    Anweisung ab:

    parent.Anzeige.document.body.offsetHeight

    document.documentElement.scrollHeight

    wäre angebrachter. Der body kann einen margin haben, der dann m.W. nicht in die offsetHeight mitreinzählt.

    offsetHeight gibt dir immer die Höhe des Elements.
    scrollHeight gibt dir die Höhe des scrollbaren Inhalts des Elements, falls es scrollbar ist. wenn es nicht scrollbar ist, dürfte scrollHeight und offsetHeight gleich sein.

    Aber das mit body/documentElement ist leider immer etwas schwierig. Beim IE hängt es noch davon ab, ob er im Quirksmode ist oder nicht.
    Dann gibts auch noch clientHeight...

    Die Scrollhöhe/Scrollweite (?) ermittle ich mit folgender Anweisung:

    parent.Anzeige.document.body.scrollTop

    Das gibt an, wie weit das Element nach unten gescrollt wurde.

    Mir ist aber aufgefallen, dass ich unterschiedliche Werte erhalte:

    offsetHeight = 4280

    Höhe des Body.

    scrollTop    = 3525

    Soviel px hast du ihn nach unten gescrollt.

    Wie muß ich beim Firefox vorgehen, um die Scrollhöhe/Scrollweite korrekt
    auslesen kann?

    scrollTop.

    Gruß!

    1. Hallo Christian,

      gut, danke für Deine Erklärungen.

      Ich habe es nun folgendermassen versucht:

      if (parent.Anzeige.document.documentElement.scrollTop < parent.Anzeige.document.documentElement.scrollHeight)
         {
            parent.frames["Anzeige"].scrollBy (0, Wert);
         }
         else
         {
            alert ("Seitenende");
         }

      Meinen Ansatz "ausgedeutscht":

      Wenn die Scrollhöhe kleiner als die Länge des Dokumentes ist
         {
            scrolle den Frame
         }
         ansonsten
         {
            gib "Seitenende" aus
         }

      Müsste doch stimmen, ich komme aber nicht in den else-Zweig, auch wenn
      ich bis an's Ende der Seite gescrollt habe...

      Ich berücksichtige bei meiner Umsetzung nur Firefox, da die Seite nur
      lokal auf meinem Rechner laufen wird.

      Was stimmt noch nicht?

      Gruß
      enrico

      1. hi,

        du müsstest m.E. noch die clientHeight auf die scrollTop addieren...

        Aber ich bin eigentlich zu müde um das klar durch zu denken ;-)

        Gruß!

        1. Hallo Christian,

          so klappt es:

          if ((parent.Anzeige.document.body.scrollTop + parent.Anzeige.document.body.clientHeight) < parent.Anzeige.document.body.offsetHeight)

          Mußte wieder document.body verwenden.

          Hat lange, sehr lange gedauert, aber jetzt klappt es :-))))

          So, gute Nacht und nochmals vielen Dank.

          Gruß
          enrico