Dennis: scrollby -> wie feststellen ob am Seitenende?

Hi an euch alle mal wieder,

Ich sitze gerade vor einem PHP Script, welches per Zufall diverse Daten ausgiebt. Durch einen Meta Refresh wird das ganze wieder ab und zu neugeladen.

Das Problem ist nur, dass einige Inhalte überlang sind, weshalb ich per JS nach 4 Sekunden anfage das Dokument zu scrollen.

Fakt/Ziel ist folgendes: Ich würde den Refresh gerne per JS auslösen, aber erst wenn die Seite bis ans Ende gescrollt ist.
Problem: Ich weiß nicht, wie ich festellen kann, ob das Dokument schon bis zum Seitenende gescrollt wurde, das Archiv hat mir auch nicht weitergeholfen.

Ich habe folgende zwei Ideen zum Lösungsansatz angedacht:

1. Zuerst habe ich mir überlegt, ob scrollBy() vielleicht einen Rückgabewert liefert, ob noch weiter gescrollt werden konnte oder nicht. Doch leider war if(window.scrollBy(0,100)) immer false, obwohl da noch massig Text zum Scrollen dagewesen wäre. Auf diese Methode scheint es also nicht zu gehen.

2. Ich habe versucht herauszufinden, wie groß, also wie hoch, das gesamte Dokument ist. Im IE hab ich leider nix gefunden, wo die gesuchte Höhe drinsteht, der Mozilla hat mir mit document.body.offsetHeight einen Wert zurückgegeben, der mir realistisch erschien.
Was ich hier machen wollte, war praktisch, dass ich scrollTo() verwende (in einer Schleife die Werte immer hochzähle), bis der ScrollTo-Wert den Wert der Höhe des Dokuments erreicht hat, dann abreche und die Seite neu lade.
Doch wie gesagt, krieg ich das nicht im IE zum Laufen.

Nun würde ich mich also über Anregungen und Tipps eurerseits freuen. Es kann alles möglich sein, denn das was ich mache dient nur zu (internen) Präsentationszwecken auf einem Rechner, wo ich auch an den Einstellungen rumfriemeln könnte.

Es wäre sicherlich auch möglich, dort Mozilla zu nutzen, nur wäre es mir lieb, wenn es auch im IE ginge, da _nur_ dieser Standardmäßig auf dem Recher (es handelt sich übrigens um unsere Schulrechner *g*) drauf ist.

Danke schon mal so weit,

MfG, Dennis.

--
Mein SelfCode: ie:{ fl:{ br:^ va:) ls:< fo:) rl:( n4:& ss:) de:> js:( ch:{ sh:( mo:} zu:|
Zufällige Hinweise:
------------------------
Sinnvolles Zitieren: Man zitiert nur Teilsätze des Vorposters
auf die man sich bezieht! Nicht einfach alles.
  1. hi,

    Zuerst habe ich mir überlegt, ob scrollBy() vielleicht einen Rückgabewert liefert, ob noch weiter gescrollt werden konnte oder nicht. Doch leider war if(window.scrollBy(0,100)) immer false, obwohl da noch massig Text zum Scrollen dagewesen wäre. Auf diese Methode scheint es also nicht zu gehen.

    stört sich denn scrollBy() überhaupt daran, wenn du "am ende" des dokumentes noch weiter zu scrollen versuchst?

    gruß,
    wahsaga

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

      stört sich denn scrollBy() überhaupt daran, wenn du "am ende" des dokumentes noch weiter zu scrollen versuchst?

      Nein, aber sorry, ich habe mich vielleicht unverständlich ausgedrückt: Ich will den Moment, wo die Seite bis untengescrollt ist abfangen, weil dann (über location.href o.ä.) eine neue Seite, bzw. die alte Seite reloaded werden soll (mit anderen Parameter, die per PHP vorgegeben wurden).

      ScrollBy() stört das ganze überhaupt nicht, das Problem liegt eben dabei, dass die Seiten unterschiedlich lang sind und da man ja vorher nicht weiß wie lang eine Seite ist (sonst könnte man ja auch per PHP die Zeitspanne errechnen: v = x px/s), kann ich nicht errechnen, _wann_ der Reload Befehl ausgeführt werden muss.

      Jetzt etwas klarer, was ich meine? ;-)

      MfG, Dennis.

      --
      Mein SelfCode: ie:{ fl:{ br:^ va:) ls:< fo:) rl:( n4:& ss:) de:> js:( ch:{ sh:( mo:} zu:|
      Zufällige Hinweise:
      ------------------------
      Probleme mit Formularen?
      http://tutorial.riehle-web.com hilft weiter.
    2. Hi wahsaga,

      folgendes macht im Mozilla 1.7.3 genau das, was ich will:

      var fullheight = document.body.offsetHeight;

      function reload(fullheight,oldheight)
      {
       if(oldheight + 500 < fullheight)
       //Das + 500, damit er, wenn er am Ende ist, nicht ganz so lange braucht,
       //bis er fertig ist (ein bisschen Pause ist gewollt).
       {
        //Neue ScrollTo Position entspricht der alten Position plus 2 Pixel
        var newheight = oldheight + 2;
        //ScrollTo Vorgang ausführen
        window.scrollTo(0, newheight)
        //In 100 Millisekunden den nächsten Scrollvorgang ausführen
        window.setTimeout("reload(" + fullheight + "," + newheight + ")",100);
       }
       else
       //Wenn es nur noch weniger als 500 Px bis zum Dokument Ende sind (dann
       //gilt das als fertig gescrollt) eine Meldung ausgeben
       {
        alert("Dokument zu Ende gescollt");
        //bwz. später reload ausführen:
        //self.location.href = <?php echo $_SERVER['PHP_SELF']."?page=". ++ $page; ?>
       }
      }

      window.setTimeout("reload(" + fullheight + ",0)", 2000);

      Im IE klappt dafür aber wie gesagt nicht, weil dort in document.body.offsetHeight die Höhe des Anzeigefenster und nicht die Höhe des Dokuments drin steht.

      MfG, Dennis.

      --
      Mein SelfCode: ie:{ fl:{ br:^ va:) ls:< fo:) rl:( n4:& ss:) de:> js:( ch:{ sh:( mo:} zu:|
      Zufällige Hinweise:
      ------------------------
      Meine Homepage: http://www.riehle-web.com
      Tutorial: http://tutorial.riehle-web.com