jQuery Przewiń do dołu strony / iframe


224

Jak używać jquery do przewijania w dół do dolnej części ramki iframe lub strony?

Odpowiedzi:


360

Jeśli chcesz ładnego powolnego przewijania animacji, każda kotwica z href="#bottom"tym przewinie Cię do dołu:

$("a[href='#bottom']").click(function() {
  $("html, body").animate({ scrollTop: $(document).height() }, "slow");
  return false;
});

Zmień selektor.


48
Działa to w przeglądarce Firefox 3.5.7, ale nie w Chrome 4.0.295.0. W przeglądarce Chrome działa: $ („html, body”). Animate ({scrollTop: $ (document) .height ()}, „slow”);
Tom

1
@Tom, nie dostrzegam różnicy między twoim rozwiązaniem a Markiem!
Muhammad Gelbana,

4
@MuhammadGelbana sprawdź datę edycji. Wygląda na to, że Mark zaktualizował swoją odpowiedź, aby uwzględnić poprawkę Toma.
Paul Parker

W rzeczywistości nie ma potrzeby uzyskiwania wysokości elementu: stackoverflow.com/a/44578849/1450294
Michael Scheper

210

scrollTop () zwraca liczbę pikseli, które są ukryte przed widokiem z przewijanego obszaru, co daje mu:

$(document).height()

spowoduje przekroczenie dolnej części strony. Aby przewijanie faktycznie „zatrzymało się” u dołu strony, bieżąca wysokość okna przeglądarki wymaga odjęcia. Pozwoli to na użycie poluzowania, jeśli jest to wymagane, więc staje się:

$('html, body').animate({ 
   scrollTop: $(document).height()-$(window).height()}, 
   1400, 
   "easeOutQuint"
);

29
To powinna być zaakceptowana odpowiedź, Tom ma absolutną rację, zaakceptowana odpowiedź nie działa dobrze, ponieważ przewijanie nagle zatrzymuje się zamiast przetwarzać koniec łagodzenia.
Christian

33
Uwaga: easeOutQuintwymaga wtyczki, sam jQuery ma tylko lineari swing.
newenglander

koleś, to dobre rzeczy! dzięki. nawet robienie tego z „swing” zamiast „easyoutquint” pokazuje zauważalne różnice ”.
Jesse Head

Nie jestem pewien, czy jest to zła forma, ale edytowałem zaakceptowaną odpowiedź, aby dodać wskaźnik do tej odpowiedzi. Jeśli tak, to ktoś może to cofnąć.
xaxxon

To rozwiązanie działa tylko wtedy, gdy strona jest interpretowana w trybie zgodnym ze standardem. Na przykład, jeśli nie uwzględnisz <!DOCTYPE html>w Chrome, Chrome zwróci dokładnie tę samą wartość dla wysokości okna i dokumentu, w którym to przypadku $(document).height()-$(window).height()zawsze zwróci 0. Zobacz tutaj: stackoverflow.com/questions/12103208/...
VKK

35

Na przykład:

$('html, body').scrollTop($(document).height());

Nie mogę tego zmusić do działania. W ogóle nic nie robi.
Adam,

@adam Z jakiej wersji jQuery korzystasz?
Sonny Boy,

14

Po tym, jak ten wątek nie zadziałał na moją konkretną potrzebę (przewijanie w obrębie konkretnego elementu, w moim przypadku w obszarze tekstowym), znalazłem to w dalszej części, co może okazać się pomocne dla kogoś, kto czyta tę dyskusję:

Alternatywa na planetcloud

Ponieważ miałem już buforowaną wersję mojego obiektu jQuery ( myPanelw poniższym kodzie jest obiekt jQuery), kod dodany do mojej procedury obsługi zdarzeń był następujący:

myPanel.scrollTop(myPanel[0].scrollHeight - myPanel.height());

(dzięki Ben)


1
Pracował dla mnie z div:var d = $('#mydiv'); d.scrollTop (d[0].scrollHeight - d.height ());
gregn3

Czy naprawdę musisz robić matematykę? stackoverflow.com/a/44578849/1450294
Michael Scheper

4

Prosta funkcja, która przeskakuje (natychmiast przewija) na dół całej strony. Korzysta z wbudowanego .scrollTop(). Nie próbowałem dostosowywać tego do pracy z poszczególnymi elementami strony.

function jumpToPageBottom() {
    $('html, body').scrollTop( $(document).height() - $(window).height() );
}

2
Nie wiem dlaczego, ale nie działało to dla mnie w przeglądarce Firefox 26.0 i przewijało się do góry po uruchomieniu tej funkcji. Ten problem został rozwiązany przez powiedzenie$(document).scrollTop($(document).height());
Jack

2

Ten działał dla mnie:

var elem = $('#box');
if (elem[0].scrollHeight - elem.scrollTop() == elem.outerHeight()) {
  // We're at the bottom.
}

To nie odpowiada na pytanie
huyz

2

Jeśli nie zależy ci na animacji, nie musisz uzyskać wysokości elementu. Przynajmniej we wszystkich przeglądarkach, których wypróbowałem, jeśli podasz scrollTopliczbę większą niż maksymalna, po prostu przewinie się do dołu. Podaj więc jak największą liczbę:

$(myScrollingElement).scrollTop(Number.MAX_SAFE_INTEGER);

Jeśli chcesz przewijać stronę, a nie jakiś element z paskiem przewijania, po prostu myScrollingElementzrównaj z „body, html”.

Ponieważ muszę to zrobić w kilku miejscach, napisałem szybką i brudną funkcję jQuery, aby była wygodniejsza, na przykład:

(function($) {
  $.fn.scrollToBottom = function() {
    return this.each(function (i, element) {
      $(element).scrollTop(Number.MAX_SAFE_INTEGER);
    });
  };
}(jQuery));

Mogę to zrobić, dodając kilka rzeczy:

$(myScrollingElement).append(lotsOfHtml).scrollToBottom();

0

Skrypty wymienione w poprzednich odpowiedziach, takie jak:

$("body, html").animate({
    scrollTop: $(document).height()
}, 400)

lub

$(window).scrollTop($(document).height());

nie będzie działać w Chrome i będzie wzburzony w Safari w przypadku, gdy html tag w CSS ma overflow: auto;ustawioną właściwość. Zrozumienie zajęło mi prawie godzinę.


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.