2012-10-08 23 views
52

Po prostu próbuję coś zrobić, gdy pozycja przewijania strony osiągnie określoną wysokość. Jednak scrollTop() zwraca 0 lub null bez względu na to, jak daleko przewijam. Jest to funkcja help Używam sprawdzić wartość scrollTop():

$('body').click(function(){ 
    var scrollPost = $(document).scrollTop(); 
    alert(scrollPost); 
}); 

Próbowałem mocowania scrollTop() do $('body'), $('html') i oczywiście $(window), ale nic się nie zmienia.

Wszelkie pomysły?

+2

nie odpowiedź, ale marginesie ... I zazwyczaj użyć waypointy jQuery plugin do tego typu rzeczy. http://getkickstrap.com/apps/waypoints-987090/ –

+1

Naprawdę nie chcę używać skryptu do zastąpienia niezwykle podstawowej funkcji javascript. – jetlej

+4

Twój kod działa dla mnie: http://jsfiddle.net/ZA7Uj/ –

Odpowiedz

99

Z jakiegoś powodu usunięcie "height: 100%" z moich znaczników HTML i body rozwiązało ten problem.

Mam nadzieję, że to pomoże komuś innemu!

+1

Łatwym rozwiązaniem tego problemu jest ustawienie maksymalnej wysokości na ciele i html zamiast na wysokości. – jwaern

+0

Jest to spowodowane przez błąd w Chrome, który powinien zostać wkrótce naprawiony: https://code.google.com/p/chromium/issues/detail?id=157855 –

+5

Dla tych z nas, którzy nie używają jQuery, moja rekomendacja zamiast tego należy użyć 'window.scrollY'. –

5

Po prostu mam dodatek dla tych, którzy mogą popełnić ten sam błąd, co ja. Mój kod był jak następuje:

var p = $('html,body'); 
$(".info").text("scrollTop:" + p.scrollTop()); 

Kod ten będzie działać na wszystkich przeglądarce wyjątkiem webkits przeglądarki takie jak Chrome i Safari, ponieważ tag <html> zawsze ma wartość zero lub scrollTop null.

Inne przeglądarki zignorują go, podczas gdy przeglądarki webkit nie.

Najprostszym solutution jest tylko, aby usunąć tag HTML z kodem et Voila:

var p = $('body'); 
$(".info").text("scrollTop:" + p.scrollTop()); 
2

miał ten sam problem. scrollTop() działa z pewnym blokiem, nie dokumentem ani treścią. Aby ta metoda pracy u należy dodać wysokość i styl przelewowy do bloku:

#scrollParag { 
    height: 500px; 
    overflow-y: auto; 
} 

, a następnie:

var scrolParag = document.getElementById('scrollParag'); 
alert(scrolParag.scrollTop); // works! 
3

moje rozwiązanie, po wypróbowaniu niektóre z powyższych i która nie pociąga za sobą zmianę każdy CSS:

var scroll_top = Math.max($("html").scrollTop(), $("body").scrollTop()) 

ten działa w wersji up-to-date Chrome, Firefox, IE i Edge.

0

Nawiasem mówiąc, wydaje się, że należy użyć

$("body").scrollTop() 

zamiast

$(".some-class").scrollTop 

Dlatego jestem zakleszczony.

0

Scroll Top zawsze zwracał 0 dla mnie. Używałem go do zwrócenia uwagi na konkretny element na stronie. Użyłem innego podejścia, aby to zrobić.

document.getElementById ("elementID") scrollIntoView();

Działa dobrze dla mnie na komórkę, tablet i komputer.

25

miałem ten sam problem z przewijaniem = 0 w:

document.body.scrollTop 

Następny czas użytkowania

document.scrollingElement.scrollTop 

Edycja 20.10.2017:

Zawsze jest 'ale', czyli wsparcia 11 robi scrollingElement, więc używaj

document.documentElement.scrollTop 
1

Usunięcie height: 100%; z znaczników html i body może rozwiązać problem.

Powód:

Powodem jest to, że możesz mieć jako wartości nieruchomości wysokości HTML i elementami nadwozia ustawić 100%. Jeśli ustawisz właściwość height elementów html i na 100%, otrzymają one wysokość równą wysokości dokumentu.

Zobacz to: http://www.mentfri.com/2017/11/jquery-scrolltop-returns-0/

+0

Chociaż może to teoretycznie odpowiedzieć na pytanie, [byłoby lepiej] (// meta.stackoverflow.com/q/8259), aby uwzględnić istotne części odpowiedzi tutaj, i podać link dla odniesienia. – LW001

Powiązane problemy