Smooth Scroll – elegantes Scrollen mit Jquery

smooth-scroll-jquery

Update zum Thema Smooth Scroll
Im Artikel »Back-to-Top Buttons mit Smooth Scroll und Fading in WordPress ver­wenden« fin­dest du eine aktu­el­lere Bearbeitung zum Thema Smooth Scroll. Außerdem wird hier noch ein prak­ti­schen WordPress-Plugin vor­ge­stellt. Schau doch mal rein!

Um auf län­geren Webseiten wieder zum Seitenanfang zu gelangen, oder um zwi­schen ver­schie­denen Elementen einer Seite hin und her zu scrollen, setzt man Ankerpunkte (z.B. #top). Um die nor­ma­ler­weise abrupten Seiten-Scrolls zu ver­schö­nern, kann man mit Hilfe der Javascript-Library Jquery soge­nannte Smooth-Scrolls (seichte Scrolls) ein­setzen.

Eine Demo eines sol­chen Smooth-Scrolls kannst du dir auf der Webseite CSS-Tricks ansehen.

Und so inte­grierst du den Smooth-Scroll Effekt auf deiner eigenen Webseite:

1. Setzte deine Ankerpunkte, z.B. ganz oben auf deiner Seite:
<a name="top" id="top"></a>
2. JQeury downloaden

Auf der JQuery-Webseite fin­dest du die neusten Versionen der JQeury-Library zum run­ter­laden. Downloade JQuery, und lade es in einem Ordner auf deinem Server hoch. Rufe dann die QJuery-Library im head-Tag deiner Webseite auf. Alternativ kannst du auch direkt auf die JQuery-Library auf dem Google-Server linken:

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
3. Javascript Code einfügen

Speicher fol­genden Code in eine Javascript-Datei mit dem Namen »smooth­scroll«, und lade diese eben­falls in deinen js-Ordner:

$(function(){
    $('a[href*=#]').click(function() {
    if (location.pathname.replace(/^\//,'') == this.pathname.replace(/^\//,'')
        &amp;amp;&amp;amp; location.hostname == this.hostname) {
            var $target = $(this.hash);
            $target = $target.length &amp;amp;&amp;amp; $target || $('[name=' + this.hash.slice(1) +']');
            if ($target.length) {
                var targetOffset = $target.offset().top;
                $('html,body').animate({scrollTop: targetOffset}, 1000);
                return false;
            }
        }
    });
});
4. Code im head-Tag aufrufen

Um den SmoothScroll-Code auf deiner Webseite auf­zu­rufen, fügst du jetzt noch fol­genden Code in den Head-Tag ein:

<script type="text/javascript" src="js/smoothscroll.js"></script>

Und das war’s auch schon! Linkst du jetzt von einem Punkt deiner Webseite auf den Ankerpunkt #top, scrollt deine Seite ele­gant nach oben.

Ich finde den Smooth-Scroll eine sehr ele­gante und benut­zer­freund­liche Methode, um auf einer Webseite zu navi­gieren. Die SmoothScroll-Methode ist z.B. auch bei Single-Page-Webseiten beson­ders gefragt. Hier ein beson­ders schönes Beispiel!

Kennst du wei­tere schöne Webseiten mit tollen Scroll-Effkten? Welche Javascript-Effekte gefallen dir beson­ders? Schreib mir doch einen Kommentar, ich freue mich schon auf dein Feeback!

15 Kommentare

  1. Dave

    Ja dieses Smooth Scrollen gefällt mir. Habe da auch auf meiner Site etwas ein­ge­baut vor einiger Zeit. Einfach ein »Scroll to Top« wenn man nach unten scrollt. :) !

  2. Ellen

    Hallo Dave,

    vielen Dank für deinen Kommentar! Hey, das Scroll to Top auf deiner Seite sieht super aus :-) Mir gefällt das SmoothScrollen auch soooooooo viel besser!

    Gruß Ellen

  3. Barbara

    Schon wieder was gelernt :) Ein sehr schöner Effekt! Und wenn du beschreibst, wies geht, dann ver­steh ich das sogar. Vielen Dank für die hilf­reiche Erklärung.

  4. Ellen

    Hihi ;-) Vielen lieben Dank für deinen lieben Kommentar, Barbara! Die SmoothScrolls sind wirk­lich sehr leicht in eine Webseite ein­zu­bauen, aber der Effekt ist super angenehm!

  5. Jannis Gerlinger

    Hi Ellen,

    super erklärt aber in der smoothscroll.js hast du ein Fehler bzw ein Zeichen vergessen:

    Geschrieben hast du:
    $target = $target.length && $target || $(›[name=‹ this.hash.slice(1) ‹]‹);

    heißen muss es:
    $target = $target.length && $target || $(›[name=‹ + this.hash.slice(1) +‹]‹);

    es fehlt ein »+« damit es funktioniert.

    Gruß Jannis

  6. Ellen

    Hallo Jannis,

    vielen Dank für deinen Kommentar und für deinen wich­tigen Hinweis. Sorry, dass ich den Code erst jetzt ver­bes­sert habe. Jetzt sollte es aber auf alle Fälle funktionieren :-)

    Gruß Ellen

  7. Giulia

    Habe gerade ver­sucht es auf meiner Seite ein­zu­binden, aber es funk­tio­niert immer noch nicht. Nur so als kleiner Hinweis ;)

    _______________________________________________

    $(func­tion(){

    $(›a[href*=#]‹).click(function() {

    if (location.pathname.replace(/^\//,«) == this.pathname.replace(/^\//,«)
    && location.hostname == this.hostname) {

    var $target = $(this.hash);

    $target = $target.length && $target || $(›[name=‹ + this.hash.slice(1) +‹]‹);

    if ($target.length) {

    var target­Offset = $target.offset().top;

    $(›html,body‹).animate({scrollTop: target­Offset}, 1000);

    return false;

    }

    }

    });

    });

    ________________________________________________

    Damit hat es dann geklappt.

    Grüße,Giulia

    • Ellen

      Hallo Giulia,

      vielen herz­li­chen Dank für deine Hilfe und den Code-Schnipsel :-) Ich werde den Artikel auf jeden Fall gleich am Wochenende updaten, so dass die Anleitung wieder funktioniert.

      1000 Dank und viele Grüße,
      Ellen

  8. Oliver

    Hallo,

    bin jetzt schon länger begeis­terter Leser Eurer Seite und mich würde auch bren­nend inter­es­sieren, wie ich den INHALT eines DIV’s (in meinem Fall der des »content«-Div’s im twentyten-Theme) mit Buttons nach oben und unten scrollen kann…

    Beisse mir so langsam die Zähne aus :)

    Viele Grüße
    Oliver

  9. Ralf

    Danke für die Anleitung hier des ScrollTops , bin in jQuery teil­weise doch noch nicht so frisch , so konnte ich noch ein wenig was über CSS Seleketoren von jQuery in Erfahrung bringen.

    Ich hoffe Du nimmst mir das nun nicht übel ich hab deinen Code noch ein wenig ver­ein­facht und gleich noch gekürzt.

    $(func­tion(){
    $(›a[href*=#]‹).click(function(evt) {
    evt.stopPropagation();
    var target = this.href.match(/[^#]+$/)[0];
    var offset = jQuery(›a[name=‹+target+‹]‹).offset().top;
    $(›html,body‹).animate({scrollTop: offset}, 1000);
    })
    });

    Okay gut er prüft nun nicht unbe­dingt ab ob es das Element gibt , aber ich denk mal einer der sich eine Webseite baut sollte schon darauf achten das es nicht ins Nirgendwo hin verweist ;)

    Eine schöne Woche wünsch ich noch ,

    MfG Ralf

    • Ralf

      Da ist mir glatt ein Fehler unter­laufen , statt evt.stopPropagation() muss es natür­lich evt.preventDefault() heißen damit die Standartausführung des Links abge­bro­chen wird.

  10. Klaus

    Hallo Ellen,

    vielen Dank für diesen tollen Beitrag. Habe ich direkt bei mir ein­ge­baut und hat auf Anhieb funktioniert.

    Herzliche Grüße
    Klaus

  11. mr92

    Hallo,

    wow danke für das tolle Tutorial! Ich suche schon lange nach diesem Effekt, finde aber nicht so richtig etwas brauchbares!

    Allerdings funk­tio­niert es bei mir leider nicht, mir wird gesagt, dass in dieser Zeile ein Syntaxfehler liegt?

    &amp;&amp; location.hostname == this.hostname) {

    würde mich über Infos freuen!

  12. Gregor Kempny

    Hallo mr92,

    dieser Fehler schleicht sich ein, wenn man den Code oben per Clipboard-Kopierbutton abholt. Ersetze die umge­wan­delten & in ein­fache &, d.h. in der if-Kondition die Bedingungen immer mit && trennen.

Hinterlasse eine Antwort

Pflichtfelder sind mit * markiert.

*


Top