Wenn Sie versuchen, einen oberen Versatz von einem Listenelement in einem übergeordneten Element zu erhalten, und dieses übergeordnete Element nicht an der oberen Position liegt, erhalten Sie einen falschen Wert.
Versuchen Sie, die margin-top
für das Element .container
zu entfernen, und Sie werden sehen, dass es funktioniert.
Was ist die Lösung für dieses Problem?
Ihre Frage:
Was ist die Lösung für dieses Problem?
Ich schlage vor, dass Sie .container
auf relative
:
und innerhalb deines Skripts .position().top
verwenden, wird es dein Leben einfacher machen:
.offset().top
:
Beschreibung : Ermittelt die aktuellen Koordinaten des ersten Elements in der Menge der passenden Elemente relativ zu das Dokument ..
.position().top
:
Aus der Dokumentation:
Beschreibung: Ruft die aktuellen Koordinaten des ersten Elements in der Menge der übereinstimmenden Elemente relativ zum übergeordneten Offset ab.
.position().top
wird von oben bis zum übergeordneten Element berechnet, wenn das übergeordnete Element relativ positioniert ist.
Ich denke, es funktioniert einwandfrei. Laut der offset()
jQuery-Dokumentation :
Mit der Methode .offset () können wir die aktuelle Position von einem abrufen Element relativ zum Dokument
Sie haben also das Problem, dass Sie versuchen, die ul
zu scrollen, aber mit dem Wert des scrollTop des Elements innerhalb des Dokuments und nicht innerhalb der Liste. Um das zu beheben, korrigieren Sie einfach den Wert, indem Sie scrollTop des übergeordneten Elements ( ul
) berücksichtigen:
Sie können sehen, dass es an dieser Bearbeitung Ihres JSBin funktioniert: Ссылка
Ich hatte das gleiche Problem. Alle Lösungen im Web funktionieren nicht für mich.
Wenn Sie Ränder verwenden, um bestimmte Elemente ohne Rahmen zu trennen, verwenden Sie stattdessen padding. jQuery's offset () zählt für Paddings, aber ohne Margen. Die Positionsnummern in offset () werden wieder korrekt.
Tags und Links javascript html jquery css jquery-animate