jQuery Scrollen Sie zum Ende der Seite / des Iframes

224

Wie scrolle ich mit jquery bis zum Ende eines Iframes oder einer Seite?

Adam
quelle

Antworten:

360

Wenn Sie eine schöne langsame Animation scrollen möchten, werden Sie für jeden Anker mit href="#bottom"diesem nach unten scrollen:

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

Sie können den Wahlschalter jederzeit ändern.

Mark Ursino
quelle
48
Dies funktioniert in Firefox 3.5.7, jedoch nicht in Chrome 4.0.295.0. In Chrome funktioniert Folgendes: $ ('html, body'). Animate ({scrollTop: $ (document) .height ()}, 'slow');
Tom
1
@ Tom, ich kann den Unterschied zwischen deiner Lösung und Marks nicht erkennen!
Muhammad Gelbana
4
@ MuhammadGelbana Überprüfen Sie das Bearbeitungsdatum. Es scheint, dass Mark seine Antwort aktualisiert hat, um Toms Fix aufzunehmen.
Paul Parker
Es ist eigentlich nicht nötig, die Höhe des Elements zu ermitteln: stackoverflow.com/a/44578849/1450294
Michael Scheper
210

scrollTop () gibt die Anzahl der Pixel zurück, die im scrollbaren Bereich nicht sichtbar sind. Geben Sie also Folgendes an:

$(document).height()

überschreitet tatsächlich den unteren Rand der Seite. Damit der Bildlauf am unteren Rand der Seite tatsächlich stoppt, muss die aktuelle Höhe des Browserfensters subtrahiert werden. Dies ermöglicht die Verwendung von Lockerung, falls erforderlich, so dass:

$('html, body').animate({ 
   scrollTop: $(document).height()-$(window).height()}, 
   1400, 
   "easeOutQuint"
);
Tom Bates
quelle
29
Dies sollte die akzeptierte Antwort sein. Tom hat absolut Recht. Die akzeptierte Antwort funktioniert nicht gut, da der Bildlauf abrupt stoppt, anstatt das Ende der Lockerung zu verarbeiten.
Christian
33
Hinweis: easeOutQuinterfordert ein Plugin, jQuery selbst hat nur linearund swing.
Newenglander
Alter, das ist gutes Zeug! Vielen Dank. Selbst wenn man dies mit "Swing" anstelle von "Easyoutquint" macht, zeigt sich ein spürbarer Unterschied.
Jesse Head
Ich bin mir nicht sicher, ob es sich um eine schlechte Form handelt, aber ich habe die akzeptierte Antwort bearbeitet, um einen Zeiger auf diese Antwort hinzuzufügen. Wenn ja, kann es jemand zurücksetzen.
Xaxxon
Diese Lösung funktioniert nur, wenn die Seite im kompatiblen Modus eines Standards interpretiert wird. Wenn Sie beispielsweise <!DOCTYPE html>in Chrome nicht angeben, gibt Chrome genau den gleichen Wert für die Fenster- und Dokumenthöhe zurück. In diesem Fall $(document).height()-$(window).height()wird immer 0 zurückgegeben. Siehe hier: stackoverflow.com/questions/12103208/…
VKK
35

Beispielsweise:

$('html, body').scrollTop($(document).height());
Tatu Ulmanen
quelle
Ich kann das scheinbar nicht zum Laufen bringen. Macht überhaupt nichts.
Adam
@adam Welche Version von jQuery verwenden Sie?
Sonny Boy
14

Nachdem dieser Thread für mich aufgrund meiner spezifischen Anforderungen (Scrollen innerhalb eines bestimmten Elements, in meinem Fall eines Textbereichs) nicht funktioniert hat, habe ich dies im Jenseits herausgefunden, was sich für andere, die diese Diskussion lesen, als hilfreich erweisen könnte:

Alternative auf planetcloud

Da ich bereits eine zwischengespeicherte Version meines jQuery-Objekts hatte (der folgende myPanelCode ist das jQuery-Objekt), war der Code, den ich meinem Ereignishandler hinzugefügt habe, einfach folgender:

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

(danke Ben)

Greg Pettit
quelle
1
Arbeitete für mich mit einem div:var d = $('#mydiv'); d.scrollTop (d[0].scrollHeight - d.height ());
gregn3
Müssen Sie tatsächlich rechnen? stackoverflow.com/a/44578849/1450294
Michael Scheper
4

Eine einfache Funktion, die zum Ende der gesamten Seite springt (sofort einen Bildlauf durchführt). Es verwendet die eingebaute .scrollTop(). Ich habe nicht versucht, dies an einzelne Seitenelemente anzupassen.

function jumpToPageBottom() {
    $('html, body').scrollTop( $(document).height() - $(window).height() );
}
Rory O'Kane
quelle
2
Ich weiß nicht warum, aber dies funktionierte bei Firefox 26.0 nicht und würde bei Ausführung dieser Funktion nach oben scrollen. Dieses Problem wurde gelöst, indem gesagt wurde$(document).scrollTop($(document).height());
Jack
2

Dieser hat für mich gearbeitet:

var elem = $('#box');
if (elem[0].scrollHeight - elem.scrollTop() == elem.outerHeight()) {
  // We're at the bottom.
}
MountainRock
quelle
Dies beantwortet die Frage nicht
Huyz
2

Wenn Sie sich nicht für Animation interessieren, müssen Sie nicht die Höhe des Elements ermitteln. Zumindest in allen Browsern, die ich ausprobiert habe scrollTop, wird nur nach unten gescrollt, wenn Sie eine Zahl angeben, die größer als das Maximum ist. Geben Sie also die größtmögliche Anzahl an:

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

Wenn Sie die Seite anstelle eines Elements mit einer Bildlaufleiste scrollen möchten, setzen Sie einfach myScrollingElement'body, html' gleich.

Da ich dies an mehreren Stellen tun muss, habe ich eine schnelle und schmutzige jQuery-Funktion geschrieben, um es bequemer zu machen, wie folgt:

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

Also kann ich das tun, wenn ich ein paar Sachen anhänge:

$(myScrollingElement).append(lotsOfHtml).scrollToBottom();
Michael Scheper
quelle
0

Die in früheren Antworten erwähnten Skripte wie:

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

oder

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

funktioniert nicht in Chrome und ist in Safari nervös, falls für das html Tag in CSS die overflow: auto;Eigenschaft festgelegt wurde. Ich brauchte fast eine Stunde, um es herauszufinden.

Ilia Rostovtsev
quelle
0
$('.block').scrollTop($('.block')[0].scrollHeight);

Ich verwende diesen Code, um den Chat zu scrollen, wenn neue Nachrichten eintreffen.

Александр Лиссов
quelle
Bitte geben Sie eine Erklärung für Ihren Code an, insbesondere wenn Sie aus Ihrer eigenen Codebasis mit CSS-Klassen kopieren, die für andere Personen nicht relevant sind;)
Bruno Monteiro
Nehmen Sie einen Block mit einer Bildlaufleiste;) oder das gesamte Dokument.
15лександр Лиссов