$ (okno) .scrollTop () vs. $ (dokument) .scrollTop ()

Odpowiedzi:

149

Oba będą miały ten sam efekt .

Jednak, jak wskazano w komentarzach: $(window).scrollTop()jest obsługiwany przez więcej przeglądarek internetowych niż $('html').scrollTop().

Bodman
źródło
3
zwraca 0 w IE8 (chociaż moja strona jest w trybie dziwactw, co może odgrywać rolę)
Greg Ogle
38
$ ('html'). scrollTop () nie działa w różnych przeglądarkach (jako narzędzie do ustawiania nie działa przynajmniej w Chrome). Najbardziej crossbrowserowym sposobem na to jest teraz: $ (okno) .scrollTop () jako getter, $ ('html, body'). ScrollTop (offset) jako setter.
Georgii Ivankin
6
Zgodnie z tym odniesieniem bez argumentów scrollTopnigdzie nie przewija się, a jedynie zwraca bieżącą lokalizację przewijania.
LUB Mapper
3
@ d2burke scrollTop()jest geterem i scrollTop(value)setera. scrollTop()bez argumentów nie zmienia pozycji przewijania.
1
@ M98 window.scrollTo (x, y)
Bodman
36

Po pierwsze, musisz zrozumieć różnicę między windowi document. windowObiekt jest obiektem najwyższego poziomu po stronie klienta. Nad obiektem nie ma nic window. JavaScript jest językiem obiektowym. Zaczynasz od obiektu i stosujesz metody do jego właściwości lub właściwości jego grup obiektów. Na przykład documentobiekt jest obiektem windowobiektu. Aby zmienić document„s kolor tła, można ustawić document” s bgcolornieruchomości.

window.document.bgcolor = "red" 

Aby odpowiedzieć na twoje pytanie, nie ma różnicy w wyniku końcowym pomiędzy windowi document scrollTop. Oba dają taką samą moc wyjściową.

Sprawdź przykład roboczy pod adresem http://jsfiddle.net/7VRvj/6/

W powszechnym użyciu documentgłównie do rejestracji zdarzeń i wykorzystywać windowdo robienia rzeczy, jak scroll, scrollTopi resize.

Hussein
źródło
Brak różnicy w wyniku końcowym. Oba dają taką samą moc wyjściową.
Hussein,
Najwyraźniej nie, niektóre przeglądarki nie obsługują przewijania okna, ponieważ obiekt okna może nie być przepełnionym obiektem.
Bodman,
11
Która przeglądarka nie obsługuje okna, bądź konkretny. Oto przykład jsfiddle.net/7VRvj/4 . Sprawdź to we wszystkich przeglądarkach i daj mi znać, która przeglądarka nie działa.
Hussein,
4

Można to zrobić w różnych przeglądarkach

var top = ($(window).scrollTop() || $("body").scrollTop());
amachree tamunoemi
źródło
1
Uwaga: $("body").scrollTop()zawsze zwracaj 0 w Google Chrome.
Jonathan Parent Lévesque
2
$("body").scrollTop()jest przestarzałe, nie działa już w Chrome ani FF . Zwróci 0
Jorge Lazo
0

Właśnie miałem podobne problemy scrollTop opisanym tutaj.

W końcu udało mi się to obejść na Firefox i IE za pomocą selektora$('*').scrollTop(0);

Nie jest to idealne, jeśli masz elementy, których nie chcesz modyfikować, ale omija różnice między dokumentem, treścią, HTML i oknem. Jeśli to pomaga ...

Tapiochre
źródło
20
Nigdy nie powinieneś używać * w ten sposób (w rzeczywistości unikaj * całkowicie). Zamiast kierowania na jeden element, wpływasz na cały DOM. Ogromny hit wydajności. Selektory powinny być jak najbardziej precyzyjne.
Vlad
2
Ja osobiście zawsze korzystałem $("html,body").scrollTop(val)- nigdy nie miałem żadnych problemów
Roi