jQuery Scrollen Sie zum Ende der Seite / des Iframes


224

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

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.


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"
);

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());

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)


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() );
}

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.
}

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();

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.


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

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


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лександр Лиссов
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.