jQuery Przewiń do dołu strony / iframe

224

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

Adam
źródło

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.

Mark Ursino
źródło
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"
);
Tom Bates
źródło
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());
Tatu Ulmanen
źródło
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)

Greg Pettit
źródło
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() );
}
Rory O'Kane
źródło
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.
}
MountainRock
źródło
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();
Michael Scheper
źródło
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ę.

Ilia Rostowcew
źródło
0
$('.block').scrollTop($('.block')[0].scrollHeight);

Używam tego kodu do przewijania czatu, gdy nadchodzą nowe wiadomości.

Александр Лиссов
źródło
Podaj wyjaśnienie swojego kodu, zwłaszcza gdy kopiujesz z własnej bazy kodu, używając klas CSS, które nie są istotne dla innych osób;)
Bruno Monteiro
Weź dowolny blok za pomocą paska przewijania;) lub całego dokumentu.
Александр Лиссов