Myślałem w ten sam sposób, ale dlaczego console.log ($ (this) .scrollTop ()) = 1187 console.log ($ (this) .height ()) = 1762 tak bardzo się różni? Dla 575px, jeśli przewinąłem do dołu strony. Gdzie podziały się te 575px? Pasek przewijania nie może mieć 576 pikseli :)
Ktoś
3
Baaah, znowu moja wina. Patrzyłem na pasek przewijania z otwartym oknem firebuga. Oczywiście teraz może to być 576px. :) Dzięki chyba temat jest zamknięty.
Ktoś
101
-1 - To bardzo miłe, ale nie odpowiada na pytanie, o które chodziło scrollHeight.
Wayne
8
Prawidłowo, to jest pytanie jQuery. Ale ani $ (document) .height () ani $ (document) .scrollTop () nie podaje żądanych informacji. Żądanie dotyczyło scrollHeight. Wartość scrollHeight jest całkowitą wysokością dostępną dla elementu (jeśli jest przewijalny, ta wartość może być większa niż jego wysokość). scrollTop zwraca, jak daleko od góry znajdowałby się element. Żadne z nich nie odpowiada, jaka jest całkowita dostępna wysokość. Zobacz help.dottoro.com/ljbixkkn.php, aby dowiedzieć się więcej o scrollHeight
teynon
4
Jest to oznaczane jako odpowiedź, ponieważ odpowiada na zamierzone pytanie pytającego, dotyczące wysokości, z jaką dokument jest obecnie przewijany ... ergo "scrollHeight". To zbieg okoliczności, że ta nazwa jest używana w innym kontekście.
Chase Sandmann
177
Oto jak uzyskać scrollHeightelement uzyskany za pomocą selektora jQuery:
$(selector)[0].scrollHeight
Jeśli selectorjest to identyfikator elementu (np. elemId), Gwarantuje się, że indeksowany przez 0 element tablicy będzie elementem, który chcesz wybrać i scrollHeightbędzie poprawny.
Uzgodniono z @Tomas, użyj abstrakcji jQuery, aby lepiej radzić sobie z dziwactwami w różnych przeglądarkach. Dla przykładu powyżej może zostać zmieniony na $ (selektor) .offset () top.
Bob Gregor
3
No $ (document) .offset () zwraca wartość null, a .offset () nie ma nic wspólnego z pozycją pasków przewijania przeglądarki (.offset () zwraca współrzędne elementów względem dokumentu). Zgadzam się, że powinniśmy używać jQuery, gdy jest to możliwe, ale najwyraźniej, ponieważ nie ma obsługi różnych przeglądarek, jQuery nie zapewnia dla niego abstrakcji.
BrainSlugs83
2
Możesz także zrobić $ (selector) .get (0) .scrollHeight
Ally.
1
@Dmitri Zaitsev .scrollHeight jest właściwością węzła DOM, a nie właściwością jQuery.
Zemljoradnik
45
Jeśli używasz Jquery 1.6 lub nowszego, użyj właściwości, aby uzyskać dostęp do wartości.
$(document).prop('scrollHeight')
Poprzednie wersje pobierały wartość z attr, ale nie publikowały wersji 1.6.
W przypadku jQuery 1.7.1 zwraca to „undefined”, podobnie jak $ (document) .attr („scrollHeight”).
Michael,
5
Dzieje się tak, ponieważ brakuje elementu body. Musi to być $ (document.body) .prop ('scrollHeight') - w tym momencie równie dobrze możesz po prostu użyć document.body.scrollHeight;
Z jakiegoś powodu ta funkcja nie działa poprawnie dla mnie; używając go wewnątrz elementu iframe. Rzeczywista wysokość <html> to 256px, ta funkcja daje mi 337px i nie mam pojęcia, skąd pochodzi. PS Używam Chrome 18.
jurchiks
@jurchiks: Czy masz link do miejsca, w którym znajduje się ta ramka iframe, abym mógł się przyjrzeć?
Zuul
blade.dateks.lv/salidzinat?ids=58664,43586 . Kliknij dowolny znak zapytania. Udało mi się naprawić większość z nich, ale dwa z nich (a jest ich więcej w zależności od porównywanych elementów) nadal mają na dole jakiś dziwny, tajemniczy margines ~ 20 pikseli. Znika jednak, gdy zmieniam rozmiar okna, ponieważ zmieniłem wymiary wyskakującego okienka przy zmianie rozmiaru okna.
jurchiks Kwietnia
3
Aby uzyskać rzeczywistą przewijalną wysokość obszarów przewijanych przez pasek przewijania okna, użyłem $('body').prop('scrollHeight') . Wydaje się, że jest to najprostsze działające rozwiązanie, ale nie sprawdzałem szczegółowo pod kątem kompatybilności. Emanuele Del Grande zwraca uwagę na inne rozwiązanie, które prawdopodobnie nie zadziała dla IE poniżej 8.
Większość innych rozwiązań działa dobrze w przypadku elementów przewijanych, ale działa to dla całego okna. Warto zauważyć, że miałem ten sam problem z rozwiązaniem Ankit, co Michael, a mianowicie $(document).prop('scrollHeight')powrót undefined.
Możesz spróbować tego na przykład, ten kod umieści pasek przewijania na dole dla wszystkich tagów DIV
Pamiętaj: jQuery może zaakceptować funkcję zamiast wartości jako argument. „this” jest obiektem traktowanym przez jQuery, funkcja zwraca właściwość scrollHeight aktualnego DIV „this” i robi to dla wszystkich DIV w dokumencie.
scrollHeight
.Oto jak uzyskać
scrollHeight
element uzyskany za pomocą selektora jQuery:$(selector)[0].scrollHeight
Jeśli
selector
jest to identyfikator elementu (np.elemId
), Gwarantuje się, że indeksowany przez 0 element tablicy będzie elementem, który chcesz wybrać iscrollHeight
będzie poprawny.źródło
Jeśli używasz Jquery 1.6 lub nowszego, użyj właściwości, aby uzyskać dostęp do wartości.
$(document).prop('scrollHeight')
Poprzednie wersje pobierały wartość z attr, ale nie publikowały wersji 1.6.
źródło
document.getElementById("elementID").scrollHeight $("elementID").scrollHeight
źródło
Używa elementów HTML DOM, ale nie selektora jQuery. Może być używany jako:
var height = document.body.scrollHeight;
źródło
Coś takiego powinno rozwiązać Twój problem:
$.getDocHeight = function(){ var D = document; return Math.max(Math.max(D.body.scrollHeight, D.documentElement.scrollHeight), Math.max(D.body.offsetHeight, D.documentElement.offsetHeight), Math.max(D.body.clientHeight, D.documentElement.clientHeight)); }; alert( $.getDocHeight() );
Ps: Wywołaj tę funkcję za każdym razem, gdy jej potrzebujesz, alert służy do celów testowych.
źródło
Aby uzyskać rzeczywistą przewijalną wysokość obszarów przewijanych przez pasek przewijania okna, użyłem
$('body').prop('scrollHeight')
. Wydaje się, że jest to najprostsze działające rozwiązanie, ale nie sprawdzałem szczegółowo pod kątem kompatybilności. Emanuele Del Grande zwraca uwagę na inne rozwiązanie, które prawdopodobnie nie zadziała dla IE poniżej 8.Większość innych rozwiązań działa dobrze w przypadku elementów przewijanych, ale działa to dla całego okna. Warto zauważyć, że miałem ten sam problem z rozwiązaniem Ankit, co Michael, a mianowicie
$(document).prop('scrollHeight')
powrótundefined
.źródło
Spróbuj tego:
var scrollHeight = $(scrollable)[0] == document ? document.body.scrollHeight : $(scrollable)[0].scrollHeight;
źródło
Możesz spróbować tego na przykład, ten kod umieści pasek przewijania na dole dla wszystkich tagów DIV
Pamiętaj: jQuery może zaakceptować funkcję zamiast wartości jako argument. „this” jest obiektem traktowanym przez jQuery, funkcja zwraca właściwość scrollHeight aktualnego DIV „this” i robi to dla wszystkich DIV w dokumencie.
$("div").scrollTop(function(){return this.scrollHeight})
źródło