Jeena Paradies: herausfinden ob Seite ganz nach unten gescrollt

Hallo,

Ich habe hier eine Anwendung, die eine Seite von oben nach unten herunterscrollt. Wenn Sie ganz unten ist soll sie wieder nach oben springen und wieder herunterscrollen, aber wirklich erst wenn es ganz unten ist. Folgenden Code habe ich erstellt:

  function AutomatischScrollen() {  
   window.scrollBy(0,1);  
   if(window.pageYOffset >= window.innerHeight) {  
    window.scrollTo(0,0);  
   }  
   if(document.body.scrollTop >= document.body.offsetHeight) {  
    window.scrollTo(0,0);  
   }  
   Scrollen();  
  }  
  function Scrollen() {  
   GescrollteZeit=window.setTimeout('AutomatischScrollen()', 1);  
  }

das rufe ich mit <body onload="AutomatischScrollen();"> auf, so weit so gut. Leider scrollt kein einziger meiner Testbrowser bis ganz nach unten (Opera, FF, Konqueror) sondern hüpft nach der Hälfte der Seite einfach wieder hoch. Wie kann ich erreichen, dass die Anweisung erst ausgeführt wird, wenn ganz nach unten gescrollt wurde?

Jeena

Grüße
Jeena Paradies

--
Nichts ist besser als Bass!
  1. Hallo.

    Leider scrollt kein einziger meiner Testbrowser bis ganz nach unten (Opera, FF, Konqueror) sondern hüpft nach der Hälfte der Seite einfach wieder hoch.

    Nach der Hälfte? Nicht nach ziemlich genau einer Bildschirmseite?
    MfG, at

    1. Hallo,

      Nach der Hälfte? Nicht nach ziemlich genau einer Bildschirmseite?

      Ja, doch das kommt ziemlich hin. Aber woher ich einen Wert bekomme, der mir die Höhe des ganzen Inhalts in px sagt konnte ich auch mit deinem Hinweiß noch nicht herausfinden. Aber jetzt weiß ich wenigstens woran es liegen könnte.

      Schön dich übrigens nach langer Zeit hier wieder mal zu lesen, sicherlich hast du bemerkt, dass wir dich hier vermisst haben, ja sogar als vermisst gemeldet haben und Leute die die persönlich zu kennen scheinten beauftragt nach dir im richtigen Leben zu suchen. Ab und zu gabst du ja ein Lebenszeichen von dir, wie zum Beispiel in Ralf Segerts Gästebuch, dann wusste man dass du nicht irgendwo auf einer einsammen Insel gestrandet bist oder gar irgendwo einsam gestorben, ohne dass wir das je hätten herausfinden können. Aber so ist es nun mal im Online-Leben, man kann nach verschollenen Personen nicht einmal suchen, so lange Sie selbst nicht gefunden werden wollen; und das ist auch gut so.

      Grüße
      Jeena Paradies

      --
      Nichts ist besser als Bass!
      1. Hallo Jeena,

        Aber woher ich einen Wert bekomme, der mir die Höhe des ganzen Inhalts in px sagt ...

        document.height bzw. document.body.scrollHeight

        Grüße,

        Jochen

        --
        Heute schon gescribbelt?
        Scribbleboard
      2. Hallo.

        Nach der Hälfte? Nicht nach ziemlich genau einer Bildschirmseite?
        Ja, doch das kommt ziemlich hin. Aber woher ich einen Wert bekomme, der mir die Höhe des ganzen Inhalts in px sagt konnte ich auch mit deinem Hinweiß noch nicht herausfinden. Aber jetzt weiß ich wenigstens woran es liegen könnte.

        Das ist gut. Weiter kenne ich mich nämlich in diesen Dingen kaum aus.
        Und zu dem anderen Thema wirst du in Kürze einen kleinen Elektronenbrief bekommen. Aber schon jetzt vielen Dank für den herzlichen Empfang.
        MfG, at

  2. Hi Jeena,

    (...)Aber woher ich einen Wert bekomme, der mir die Höhe des ganzen Inhalts in px sagt (...)

    für Deinen Zweck brauchst Du eigentlich nur die Scrollposition; dann kannst Du solange nach unten scrollen, bis es nicht mehr weiter geht. Du musst halt nur überprüfen, ob es 'weitergeht', und wenn nicht, dann halt wieder von vorne anfangen.
    Folgendes Skript müsste einigermaßen browserübergreifend laufen.

    Grüße,

    Sancho

    ---

    <html>
    <head>
    <script type="text/javascript">

      
      scrollObj = null;  // (das fragliche Objekt, mit der Eigenschaft 'Scrollposition')  
      scrollKey = null;  // (der Name dieser Eigenschaft)  
      
      function scrollStep()  
      {  
        y = scrollObj[scrollKey];       // Aktuelle Position speichern  
        scroll(0,y+1);                  // und mal schauen...  
        if (scrollObj[scrollKey] == y)  // Keine Änderung: Seitenende ist erreicht.  
          scroll(0,0);                  // -> Dann halt wieder von vorne.  
        setTimeout('scrollStep()',1);   // Usw. ad infinitum.  
      }  
      
      function initScrolling()  
      
      /* (Fragt - onload und einmalig - Objekt und Eigenschaftsnamen ab  
         und startet, wenn etwas brauchbares gefunden wurde, die Aktion.) */  
      
      {  
        // (Am besten immer erstmal die DOM-Knoten abgrasen, da das babylonische  
        //  Wirrwarr in punkto Objektzugriff, -namen und -eigenschaftsnamen hier  
        //  am geringsten ist.)  
      
        if (document.getElementsByTagName)  
         if (scrollObj = document.getElementsByTagName('BODY'))  
          if (scrollObj = scrollObj[0]) // (Dieses wird gesucht.)  
           if (scrollObj[scrollKey = 'scrollTop'] !== 'undefined')  
        {  
          scrollStep();  
          return;  
        }  
      
        // (Erst im zweiten Schritt ggf. browserspezifische Variablen abfragen)  
      
        if (window.pageYOffset !== 'undefined')  
        {  
          scrollObj = window;  
          scrollKey = 'pageYOffset';  
          scrollStep();  
          return;  
        }  
      
        if (document.body? (document.body.scrollTop !== 'undefined') : 0)  
        {  
          scrollObj = document.body;  
          scrollKey = 'scrollTop';  
          scrollStep();  
        }  
      
      }  
    
    

    </script>
    </head>
    <body onload='initScrolling()' style="background-color:black;">
      <div style="font-family:'Courier New', Courier, mono;
                  font-size:128px; color:orange; text-align:center">
        <script type="text/javascript">
          for ($i=0; $i<25; $i++) document.write('o<br />');
        </script>
      </div>
    </body>
    </html>

    1. Hallo,

      für Deinen Zweck brauchst Du eigentlich nur die Scrollposition; dann kannst Du solange nach unten scrollen, bis es nicht mehr weiter geht. Du musst halt nur überprüfen, ob es 'weitergeht', und wenn nicht, dann halt wieder von vorne anfangen.

      Mensch super an diese Möglichkeit habe ich gar nicht gedacht, das funktioniert ja auf jeden Fall sehr gut jetzt. Vielen Dank für deine Mühe.

      Grüße
      Jeena Paradies

      --
      Nichts ist besser als Bass!
    2. Hallo,

      für Deinen Zweck brauchst Du eigentlich nur die Scrollposition; dann kannst Du solange nach unten scrollen, bis es nicht mehr weiter geht. Du musst halt nur überprüfen, ob es 'weitergeht', und wenn nicht, dann halt wieder von vorne anfangen.

      Wie gesagt hat das eigentlich so weit ganz gut funktioniert. Nur eines ist noch sehr störend. Wenn ich per overflow: hidden; die Scrollbalken des IE im vollbildmodus ausschalte dann scrolld das ganze nicht mehr sondern läd sich immer und immer wieder einfach neu. Ich dachte dann daran im IE den scrollbalken einfach so wie die Hintergrundfarbe zu färben, was aber schon daran scheitert, dass die Seite optisch mit verschiedenen Hintergrundfarben verschiedene Absätze trennt.

      Gibt es vielleicht irgend eine andere Möglichkeit die Scrollbalken abzuschalten? Muss eigentlich nur im IE funktionieren (Opera zeigt sowieso keinen Scrollbalken bei "projection" an).

      Grüße
      Jeena Paradies

      --
      Nichts ist besser als Bass!
      1. Hi Jeena,

        erstmal noch folgendes: falls Du das Script verwendest, ist mir vorhin noch was eingefallen - die drei Zeilen mit:

        if ([Objekteigenschaft] !== 'undefined')

        sind natürlich jeweils mit dem typeof-Sprachkonstrukt zu ersetzen:

        if (typeof [Objekteigenschaft] != 'undefined')

        Sonst streikt der IE<=5 bei dem Script.
        Der IE6 kann schon DOM, daher hatte ich es nicht gemerkt.
        (Hab halt länger nicht mehr gejavascriptet.)

        Hier nochmal die korrekte Fassung der onload-Funktion:

          
          function initScrolling()  
          {  
            if (document.getElementsByTagName)  
             if (scrollObj = document.getElementsByTagName('BODY'))  
              if (scrollObj = scrollObj[0])  
               if (typeof scrollObj[scrollKey = 'scrollTop'] != 'undefined')  
            {  
              scrollStep();  
              return;  
            }  
            if (typeof window.pageYOffset != 'undefined')  
            {  
              scrollObj = window;  
              scrollKey = 'pageYOffset';  
              scrollStep();  
              return;  
            }  
            if (document.body? (typeof document.body.scrollTop != 'undefined') : 0)  
            {  
              scrollObj = document.body;  
              scrollKey = 'scrollTop';  
              scrollStep();  
            }  
          }  
        
        

        Zu Deiner zweiten Frage:

        Gibt es vielleicht irgend eine andere Möglichkeit die Scrollbalken abzuschalten? Muss eigentlich nur im IE funktionieren (Opera zeigt sowieso keinen Scrollbalken bei "projection" an).

        Da fällt mir so auf Anhieb wenig ein. Ich glaube mich dunkel zu erinnern, dass der IE die body.scrollTop-Eigenschaft tatsächlich mit dem Vorhandensein des Scrollbalkens in Verbindung bringt. D.h. Du müsstest noch ein anderes spezielles IE-Objekt finden, das die Scrollposition unabhängig vom Balken enthält. _Geben_ muss es das, sonst könnte das ganze ja nicht dargestellt werden --- obwohl, halt: das kann es ja offenbar auch nicht, wie Du schreibst.

        (Aber trotzdem: auch im DOM könnte vielleicht es nochwas anderes geben als nur scrollTOP. Aber auf die Schnelle werd ich nicht mal hier:

        http://www.chongluo.com/books/webprog/jscript/index.htm

        fündig - sonst eigentlich immer gut brauchbar).

        Allerdings hab ich bisher immer gedacht, dass Vollbildmodus sowieso 100-prozentig nicht zu bewerkstelligen ist (Z.B. zeigen Netscape und Mozilla AFAIK immer Fenstertitelzeile und -rahmen.)

        Grüße,

        Sancho

  3. um die Höhe des Dokumentes zu erhalten, benutze ich folgende Funktion, da ist ein workaround drin, den ich irgendwo gefunden habe

      
    function getDocSize(w)  
    {  
        if(!w) w = window;  
        var s = new Object();  
      
        if (typeof document.height != 'undefined')  
        {  
            s.width =  w.document.width;  
            s.height = w.document.height;  
        }  
        else  
        {  
            var test1 = document.body.scrollHeight;  
            var test2 = document.body.offsetHeight || document.body.clientHeight;  
            if (test1 > test2) // all but Explorer Mac  
            {  
                  s.width = document.body.scrollWidth;  
                  s.height = document.body.scrollHeight;  
            }  
            else // Explorer Mac;  
                 //would also work in Explorer 6 Strict, Mozilla and Safari  
            {  
                 s.width = document.body.offsetWidth || document.body.clientWidth;  
                 s.height = document.body.offsetHeight || document.body.clientHeight;  
            }  
        }  
        return s;  
    }  
    
    

    Das müßtest du an geeigneter Stelle einbauen.

    Struppi.