Ich habe 20 Listenelemente in einem Div, die jeweils nur 5 anzeigen können. Was ist ein guter Weg, um zu Punkt 10 und dann zu Punkt 20 zu scrollen? Ich kenne die Höhe aller Gegenstände.
Das scrollTo
Plugin macht das, aber seine Quelle ist nicht sehr einfach zu verstehen, ohne wirklich darauf einzugehen. Ich möchte dieses Plugin nicht verwenden.
Lassen Sie uns sagen , dass ich eine Funktion, die zwei Elemente nimmt $parentDiv
, $innerListItem
weder $innerListItem.offset().top
noch $innerListItem.positon().top
gibt mir die richtige scrollTop für $ parentDiv.
$("#container").scrollTo(target, duration, options)
. Ziel ist nur ein#anchor
. Getan.Antworten:
Das
$innerListItem.position().top
ist tatsächlich relativ zu dem.scrollTop()
seines zuerst positionierten Vorfahren. Um den richtigen$parentDiv.scrollTop()
Wert zu berechnen , müssen Sie zunächst sicherstellen, dass er$parentDiv
positioniert ist. Wenn es noch keine explizite hatposition
, verwenden Sieposition: relative
. Die Elemente$innerListItem
und alle ihre Vorfahren$parentDiv
müssen keine explizite Position haben. Jetzt können Sie zu scrollen$innerListItem
mit:quelle
Dies ist mein eigenes Plugin (positioniert das Element oben in der Liste. Speziell für
overflow-y : auto
. Funktioniert möglicherweise nicht mitoverflow-x
!):HINWEIS :
elem
ist der HTML-Selektor eines Elements, zu dem die Seite gescrollt wird. Alles , was von jQuery unterstützt, wie:#myid
,div.myclass
,$(jquery object)
, [dom - Objekt] usw.Wenn Sie es nicht zum Animieren benötigen, verwenden Sie:
Wie benutzt man:
Hinweis:
#innerItem
Kann überall drinnen sein#overflow_div
. Es muss nicht unbedingt ein direktes Kind sein.Getestet in Firefox (23) und Chrome (28).
Wenn Sie die gesamte Seite scrollen möchten, überprüfen Sie diese Frage .
quelle
elem
?? du erklärst es überhaupt nicht.$(this).scrollTop($(this).scrollTop() - $(this).offset().top + $(elem, $(this)).offset().top);
- Grüße$(this).scrollTop() - $(this).offset().top + $(elem).offset().top - 10
.Ich habe die Antwort von Glenn Moss angepasst, um der Tatsache Rechnung zu tragen, dass der Überlauf div möglicherweise nicht oben auf der Seite steht.
Ich habe dies in einer Google Maps-Anwendung mit einer reaktionsfähigen Vorlage verwendet. Bei einer Auflösung> 800px befand sich die Liste auf der linken Seite der Karte. Bei einer Auflösung <800 befand sich die Liste unterhalb der Karte.
quelle
Die obigen Antworten positionieren das innere Element oben auf dem Überlaufelement, auch wenn es innerhalb des Überlaufelements sichtbar ist. Ich wollte das nicht, also habe ich es so geändert, dass die Bildlaufposition nicht geändert wird, wenn das Element angezeigt wird.
quelle
Ich schreibe diese 2 Funktionen, um mein Leben leichter zu machen:
Und benutze sie:
quelle
elem.offset().top
berechnet vom oberen Bildschirmrand aus. Ich möchte, dass das aus dem übergeordneten Element berechnet wird. Wie mache ich das ?Nachdem ich sehr lange damit gespielt hatte, kam ich auf Folgendes:
und ich nenne es so
quelle