jQuery offset (). top gibt den falschen Wert zurück - Fehler mit dem Rand

8

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?

    
user3631654 26.03.2015, 11:46
quelle

4 Antworten

19

Ihre Frage:

Was ist die Lösung für dieses Problem?

Ich schlage vor, dass Sie .container auf relative :

setzen %Vor%

und innerhalb deines Skripts .position().top verwenden, wird es dein Leben einfacher machen:

%Vor%

.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.

%Vor% %Vor% %Vor%
    
Jai 26.03.2015, 12:04
quelle
1

Sie können dieses Problem auch auftreten, wenn einige Ihrer Inhalte Bilder sind. Wenn Sie innerhalb von document.ready () .offset () aufrufen, wurden die Bilder möglicherweise noch nicht geladen. Versuchen Sie, den Aufruf von .offset () an window.load () zu verschieben.

    
Nate 26.09.2017 20:49
quelle
0

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:

%Vor%

Sie können sehen, dass es an dieser Bearbeitung Ihres JSBin funktioniert: Ссылка

    
Alvaro Montoro 26.03.2015 11:57
quelle
0

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.

    
Eric Luo 29.05.2017 07:11
quelle