Tom Rowdys: In anderem Frame 10 Pixel scrollen Wie?

Hallo Wissende,

ich habe auf den SelfHtml-Seiten folgenden Code gefunden, mit dem auf der aktuellen Seite ganz gut Scrollen kann. Ich habe nun das "Problem", dass ich auf einem Frame einen "Nach-oben-Scrollen-Button" habe, der bei jedem Klick um 10 Pixel nach oben/unten scrollen soll und das ganze in einem anderen Frame.

Ich habe den BeispielCode schon eingekürzt, weiss aber leider nicht, wo ich das Frame angeben muss!?

<script type="text/javascript">
function NachOben () {
  var y = 0;
  if (window.pageYOffset) {
    y = window.pageYOffset;
  } else if (document.body && document.body.scrollTop) {
    y = document.body.scrollTop;
  }
}
</script>

<a href="javascript:NachOben()">nach oben scrollen</a>

Wer kann mir bitte einen Tipp geben?

  1. } else if (document.body && document.body.scrollTop) {
      y = document.body.scrollTop;

    bei document.body ...

    so vielleicht:

    } else if (window.frames[X].body && window.frames[X].body.scrollTop) {
    y = window.frames[X].body.scrollTop;

    wobei "X" die Nummer deines Frames ist.

    Bin mir jedoch nu unsicher, obs in allen Browsern läuft.

    MFG
    Griever

    1. Leider wirft Dein Vorschlag einen Fehler auf:

      'window.frames.0.body' ist Null oder kein Objekt

      ich benutze IE 6.0

      1. Oh. Stimmt

        'window.frames.0.body' ist Null oder kein Objekt

        Hab doch das "document" vergessen. Also dann:

        window.frames.0.document.body

        1. also ich versuche es derzeit so:

          <script type="text/javascript">
          function NachOben () {
            var y = 0;
            if (parent.pageYOffset) {
              y = parent.pageYOffset;
            } else if (parent.main_right.document.body && parent.main_right.document.body.scrollTop) {
              y = parent.main_right.document.body.scrollTop;
            }
          }
          </script>

          vielleicht hängt es damit zusamen, dass ich ein Frameset in einem anderen habe?

          das erste Frameset sieht so aus:

          <frameset rows="106,*,50" frameborder="NO" border="0" framespacing="0">
              <frame name="top" src="top.html" scrolling="NO">
              <frame name="main" src="main.html" scrolling="NO">
              <frame name="bottom" src="unten.html" scrolling="NO">
            </frameset>

          und in main.html ist dann folgendes notiert:

          <frameset cols="215,*" frameborder="NO" border="0" framespacing="0">
              <frame name="main_left" src="main_left.html" scrolling="NO">
              <frame name="main_right" src="main_right.html" scrolling="NO">
            </frameset>

          nun möchte ich von main_left aus in main_right hoch oder runterscrollen...Vielleicht hilft ja diese Beschreibung weiter. Fakt ist. Sobald ich am Anfang Windo stehen habe, erhalte ich immer wieder die Fehlermeldung...

          Danke Tom

          1. Ja.

            Das ist klar. Das ist dann was anderes. Du musst dir das vorstellen wie in einer Baumstruktur:

              
            Aufbau               |    Ansprechen  
            --------------------------------------------------------------  
            Hauptseite           |    window.document ...  
               Frame1            |    window.frames[0].document  
                   Unterframe1   |    window.frames[0].frames[0].document  
                   Unterframe2   |    window.frames[0].frames[1].document  
               Frame1            |    window.frames[1].document  
                   Unterframe1   |    window.frames[1].frames[0].document  
                   Unterframe2   |    window.frames[1].frames[1].document  
            
            

            Wenn du also jetzt 2 Frames in einem Dokument hast, und du bist dir unsicher, welches 0 und welches 1 usw. ist, schau einfach rein und zähle die Reihenfolge.

              
              <frameset rows="*,50%" frameborder="NO" border="0" framespacing="0">  
                <frame name="top" src="top.html" scrolling="NO">      <!-- Ist Frame Nr. 0 -->  
                <frame name="main" src="main.html" scrolling="NO">    <!-- Ist Frame Nr. 1 -->  
                <frame name="bottom" src="bottom.html" scrolling="NO"><!-- Ist Frame Nr. 2 -->  
              <!-- usw. -->  
              </frameset>  
            
            
            1. Leider wirft Dein Vorschlag einen Fehler auf:

              'window.frames.0.frames' ist Null oder kein Objekt

              Ich kanns mir langsam nicht mehr erklären.

              Hier nochmal mein Code:

              <script type="text/javascript">
              function NachOben () {
                var y = 0;
                if (window.pageYOffset) {
                  y = window.pageYOffset;
                } else if (window.frames[0].frames[1].document.body && window.frames[1].frames[1].document.body.scrollTop) {
                  y = window.frames[1].frames[1].document.body.scrollTop;
                }
              }
              </script>

              Und hier der Aufruf:
              <a href="javascript:NachOben()">nach oben scrollen</a>

              Ich danke Dir auf jeden Fall schon mal für Deine bisherige Mühe
              Tom

              1. Ich weiß, was du meinst.

                Ich hab aber jetzt auch selbst den Fehler gefunden. Du must nach dem ersten Frame wieder das document ansprechen um dann wieder auf das Frame zugreifen zu können. Hatte ich vorhin in der Tabelle vergessen.

                Also

                window.frames[0].document.frames[0] usw.

                ist ja eigentlich auch logisch, wenn man es sich so überlegt:

                'window.frames.0.frames' ist Null oder kein Objekt
                               ^ Das bedeutet, er hat den ersten Frame also gefunden.

                'window.frames.0.frames' ist Null oder kein Objekt
                                 ^ doch jetzt sollte man eigentlich document ansprechen. Daher kommt die Fehlermeldung.

                Sollte es dennoch nicht funktionieren, kannst du ja mal in SelfHTML nachschlagen. Der Link führt dich direkt zu Frames.

                MFG
                Griever

                1. ich danke dir für deine hilfe und erläuterungen, aber leider ergibt auch diese version eine fehlermeldung, nur das er jetzt sagt, dass

                  parent.frames[0].document.frames[1].document

                  kein Objekt oder Null ist, warum auch immer, denn so wie ich dich verstanden habe, sollte es doch eigentlich jetzt funzen...

                2. Ich erhalte auch eine Fehlermeldung, wenn ich folgendes versuche

                  window.frames[0].document.frames[1].document

                  nur das dann die Fehlermeldung dann sagt, dass

                  window.frames[0].document Null oder kein Objekt ist...ich verstehs nicht!

                3. ist ja eigentlich auch logisch, wenn man es sich so überlegt:

                  'window.frames.0.frames' ist Null oder kein Objekt
                                 ^ Das bedeutet, er hat den ersten Frame also gefunden.

                  'window.frames.0.frames' ist Null oder kein Objekt
                                   ^ doch jetzt sollte man eigentlich document ansprechen. Daher kommt die Fehlermeldung.

                  Das ist Quatsch, die Fehlermeldungen des IEs sind nicht logisch.

                  Das Frame sollte sich so ansprechen lassen:

                  aus main_right, ja?

                  parent.frames.main.frames.main_left

                  und wenn es immer noch nicht geht, jedes Element mal überprüfen:
                  alert( 'parent: ' + parent );
                  alert( 'parent.frames: ' + parent.frames );
                  alert( 'parent.frames.main: '+ parent.frames.main );
                  alert( 'parent.frames.main.frames.main_left: '+ parent.frames.main.frames.main_left );

                  dann sollte klar werden, wo es hakt.

                  Struppi.

                  --
                  Javascript ist toll (Perl auch!)
                  1. Also ich bin nun endlich so weit, dass ich keine Fehlermeldungen mehr erhalte. Das stimmt mich doch schon mal recht positiv.

                    <script type="text/javascript">
                    function NachOben () {

                    alert( parent.frames.main_right.document.body.scrollTop );
                      alert( parent.frames.main_right.document.body );

                    }
                    </script>

                    Also in der ersten Meldung erhalte ich dann ne 0 oder den jeweilgen Top-Wert des Frames. Das passt soweit. In der zweiten Meldung erhalten ich den Wert [object]. Das klingt doch auch ganz gut.

                    Wenn ich aber danach versuche:

                    parent.frames.main_right.document.body.scrollBy(0, -100);

                    etwas nach oben zu scrollen erhalte ich ne Fehlermeldung

                    Auch wenn ich versuche:

                    parent.frames.main_right.document.body.scrollTo(100, 100);

                    klappt es leider nicht.

                    Kann ich scrollTo respektive scrollBy nicht auf document.body anwenden? Und wenn nicht, wie soll ich es dann machen?

                  2. Also nachdem ich nun etwas "rumgespielt" habe, habe ich es nun auch hinbekommen.

                    Dies hier führte zur Lösung:

                    parent.frames.main_right.scrollTo(0, 0);

                    Also nicht body und auch nicht document ansprechen, sondern direkt das Frame! Ich danke Euch für die super-Hilfe! So habe ich auch wieder a bisserl was lernen dürfen...Ich bin so froh, dass es nun läuft...

                    Tom

                    1. Also nachdem ich nun etwas "rumgespielt" habe, habe ich es nun auch hinbekommen.

                      Dies hier führte zur Lösung:

                      parent.frames.main_right.scrollTo(0, 0);

                      Naja, statt rumspielen und Stundenlangen probieren, hätte ein Blick in selfhtml auch geholfen http://de.selfhtml.org/javascript/objekte/window.htm#scroll_by und scrollTo sind Funktion eine window Objektes (ein solches ist ein Frame)

                      Struppi.

                      --
                      Javascript ist toll (Perl auch!)
                      1. Ich denke, dass dieser Hinweis einfach mal Goldwert ist, wenn mans einfach nicht weiss...Danke trotzdem!

                        und scrollTo sind Funktion eine window Objektes (ein solches ist ein Frame)

                        Struppi.

                        1. Ich denke, dass dieser Hinweis einfach mal Goldwert ist, wenn mans einfach nicht weiss...Danke trotzdem!

                          Ich wußte bis hierher gar nicht, dass du Scrollen wolltest, ich dachte du willst nur den gescrollten Wert Wissen und hast ein Frameproblem (ich hab den ganzen Thread nur überflogen)
                          Nachdem ich nochmal dein Ausgangsposting genau gelesen habe, stimme ich dir zu, diesen Hinweis hätte man dir sofort geben können.

                          Struppi.

                          --
                          Javascript ist toll (Perl auch!)