Im ersten scroll-Artikel wurde der Inhalt mit jQuery und dem scrollTo-Plugin pixelweise gescrollt. Diesmal soll sich das Scrollen am Inhalt orientieren und absatzweise scrollen.
Struktur finden
Wie kann ich durch eine unbekannte Anzahl Elemente scrollen, die nicht nummeriert sind? Mit jQuery gibt es dafür mehrere Lösungen:- Ersten finden, dann mit .prev und .next arbeiten
- Liste erstellen
- Nummerierte Klassen vergeben
$(document).ready( function() {
$("#scrollcontent").scrollTop(0); // anfangsposition setzen
paras = $('#scrollcontent p'); // alle <p>-Elemente holen
paras.each(function(index) { // 'index' wird von jQuery gefüllt
$(this).addClass('scroll_'+index); // klassennamen basteln
maxpara = index; // maxpara mitlaufen lassen
});
aktpara = 0; //aktueller paragraph
(Die Variablen sind weiter oben im Originaltext definiert.)Nach der Ausführung dieser Schritte hat jeder Absatz im Zielcontainer
scrollcontent
einen Klassennamen, der sich aus scroll_
und einer Nummer zusammensetzt, also scroll_0, scroll_1, scroll_2
etc.Diese können dann mit
.scrollto
direkt angefahren werden:$("#scrollcontent").scrollTo($('.scroll_'+aktpara),150,{ axis:"y", offset:-64});
aktpara
ist dabei eine Zahl zwischen 0 und maxpara
. Bei jedem Scrollvorgang wird diese Variable mitgeführt. So sieht die scroll-Routine jetzt aus:function scrolly( whichdirection ) {
oldakt = aktpara; // in oldakt den zuletzt aktiven speichern, um hilight entfernen zu können
var dir = '0';
dir = (whichdirection == 'up')? -1 : +1;
aktpara = aktpara+dir;
if (aktpara >= maxpara) {
aktpara = maxpara-1;
}
if (aktpara < 0) {
aktpara = 0;
return;
}
$("#scrollcontent").scrollTo($('.scroll_'+aktpara),150,{ axis:"y", offset:-64});
}
Mit dem offset wird erreicht, daß der Absatz in der Mitte des Containers angezeigt wird und nicht ganz oben klebt. Dieser Wert muss in anderen Projekten angepasst oder berechnet werden.Hier gibt es Demo und Quelltext.
Tja, und wenn wir schon die Absätze so schön durchnummeriert haben, könnten wir doch auch gleich über einen Index nachdenken und ein Menü anbieten...
Das findet ihr hier: Automatischer Index mit jQuery Der Artikel dazu folgt auch demnächst :O)
Keine Kommentare:
Kommentar veröffentlichen