jquery: $ (Fenster) .scrollTop () aber kein $ (Fenster) .scrollBottom ()

86

Ich möchte ein Element am Ende der Seite platzieren, wenn der Benutzer die Seite scrollt. Es ist wie "feste Position", aber ich kann "Position: feste" CSS nicht verwenden, da viele Browser meiner Kunden dies nicht unterstützen können.

Ich habe festgestellt, dass jquery die obere Position des aktuellen Ansichtsfensters abrufen kann. Wie kann ich jedoch die untere Position des Bildlauf-Ansichtsfensters ermitteln?

Also frage ich, woher ich weiß: $ (Fenster) .scrollBottom ()

Bin Chen
quelle

Antworten:

147
var scrollBottom = $(window).scrollTop() + $(window).height();
David Tang
quelle
17
Sie würden denken, wenn es so einfach ist, könnte es in das Kernframework wie .scrollBottom () aufgenommen werden. Seltsam ..
Curt
38
Bildlauf Topist die Anzahl der vertikalen Pixel vom Dokument Topzum sichtbaren Fenster Top. Als genaues Gegenteil zum Scrollen Topsollte der Scroll Bottomdie Anzahl der vertikalen Pixel vom Dokument Bottomzum sichtbaren Fenster messen Bottom(dh Alfreds Antwort unten). Was diese gibt , ist die Anzahl der vertikalen Pixel aus dem Dokument _top_zu dem sichtbaren Fenster Bottom. Es ist sicher nützlich, kann es aber nicht das Gegenteil von ScrollBottom nennen (ich weiß, dass dies eine markierte Antwort ist, aber für zukünftige Leser wie mich)
DeepSpace101
1
Diese Lösung funktioniert nicht, wenn der Abstand von oben variieren kann. Wenn ich beispielsweise ein <div> habe, das einen bestimmten Abstand vom unteren Rand der Seite haben muss und die Seite erweiterbare / reduzierbare Elemente enthält, ändert sich die Körpergröße und damit der Abstand vom unteren Rand.
Absturz Springfield
@crashspringfield Eigentlich ist das eine andere Frage. Bei dieser Frage geht es darum, Dinge am unteren Rand des Ansichtsfensters und nicht am unteren Rand der Seite zu platzieren.
iPherian
88

Ich würde sagen, dass ein scrollBottom als direktes Gegenteil von scrollTop sein sollte:

var scrollBottom = $(document).height() - $(window).height() - $(window).scrollTop();

Hier ist ein kleiner hässlicher Test, der für mich funktioniert:

// SCROLLTESTER START //
$('<h1 id="st" style="position: fixed; right: 25px; bottom: 25px;"></h1>').insertAfter('body');

$(window).scroll(function () {
  var st = $(window).scrollTop();
  var scrollBottom = $(document).height() - $(window).height() - $(window).scrollTop();

  $('#st').replaceWith('<h1 id="st" style="position: fixed; right: 25px; bottom: 25px;">scrollTop: ' + st + '<br>scrollBottom: ' + scrollBottom + '</h1>');
});
// SCROLLTESTER END //
Alfred
quelle
2
Perfekt, das habe ich gesucht ... Danke!
ĿᴿᴹᴿɑƒæĿᴿᴹᴿ
9

Für die Zukunft habe ich scrollBottom zu einem jquery-Plugin gemacht, das auf die gleiche Weise wie scrollTop verwendet werden kann (dh Sie können eine Zahl festlegen, und es wird dieser Betrag vom unteren Rand der Seite gescrollt und die Anzahl der Pixel vom unteren Rand zurückgegeben oder geben Sie die Anzahl der Pixel am unteren Rand der Seite zurück, wenn keine Anzahl angegeben ist.)

$.fn.scrollBottom = function(scroll){
  if(typeof scroll === 'number'){
    window.scrollTo(0,$(document).height() - $(window).height() - scroll);
    return $(document).height() - $(window).height() - scroll;
  } else {
    return $(document).height() - $(window).height() - $(window).scrollTop();
  }
}
//Basic Usage
$(window).scrollBottom(500);
Zephyr
quelle
4
var scrollBottom =
    $(document).height() - $(window).height() - $(window).scrollTop();

Ich denke, es ist besser, die untere Schriftrolle zu bekommen.

pb2q
quelle
2

Dies wird nach ganz oben scrollen:

$(window).animate({scrollTop: 0});

Dies wird ganz nach unten scrollen:

$(window).animate({scrollTop: $(document).height() + $(window).height()});

.. Ändern Sie das Fenster bei Bedarf in die gewünschte Container-ID oder Klasse (in Anführungszeichen).

Schnueffelhund
quelle
Wie animiere ich zum unteren Rand eines Div mit fester Höhe, overflow-y: autodamit es tatsächlich zum unteren Ende des Textes (der über die Höhe des Div hinausgeht) rollt?
user1063287
Aktualisieren Sie meine Frage, falls es jemand anderem hilft: Ich denke, die zu verwendende Eigenschaft könnte sein scrollHeight- siehe: stackoverflow.com/q/7381817
user1063287
0

Hier ist die beste Option, um für das Tabellenraster nach unten zu scrollen. Es wird zur letzten Zeile des Tabellenrasters gescrollt:

 $('.add-row-btn').click(function () {
     var tempheight = $('#PtsGrid > table').height();
     $('#PtsGrid').animate({
         scrollTop: tempheight
         //scrollTop: $(".scroll-bottom").offset().top
     }, 'slow');
 });
SantoshK
quelle
0
// Back to bottom button
$(window).scroll(function () {
    var scrollBottom = $(this).scrollTop() + $(this).height();
    var scrollTop = $(this).scrollTop();
    var pageHeight = $('html, body').height();//Fixed

    if ($(this).scrollTop() > pageHeight - 700) {
        $('.back-to-bottom').fadeOut('slow');
    } else {
        if ($(this).scrollTop() < 100) {
            $('.back-to-bottom').fadeOut('slow');
        }
        else {
            $('.back-to-bottom').fadeIn('slow');
        }
    }
});
$('.back-to-bottom').click(function () {
    var pageHeight = $('html, body').height();//Fixed
    $('html, body').animate({ scrollTop: pageHeight }, 1500, 'easeInOutExpo');
    return false;
});
Ghebrehiywet
quelle
0

Versuchen:

 $(window).scrollTop( $('body').height() );
user944550
quelle
0
var scrolltobottom = document.documentElement.scrollHeight - $(this).outerHeight() - $(this).scrollTop();
Gzenakos
quelle
2
Bitte vermeiden Sie nur Code-Antworten und geben Sie eine Erklärung.
Mickael B.
-3

Dies ist ein schneller Hack: Weisen Sie den Bildlaufwert einfach einer sehr großen Zahl zu. Dadurch wird sichergestellt, dass die Seite nach unten gescrollt wird. Verwenden von einfachem Javascript:

document.body.scrollTop = 100000;
nicht angeschlossen
quelle
Dies funktioniert nicht bei Seiten, die länger als 100000 Pixel sind. Das scheint ein ziemlicher Randfall zu sein, aber in Fällen wie endlosen Bildlaufseiten ist es nicht so unwahrscheinlich. Wenn Sie wirklich eine Lösung ohne Abfrage wünschen, ist diese Antwort möglicherweise die bessere Option.
Lucash
Ja, es geht darum, eine möglichst große Zahl zu verwenden, z. B. 99999999999999999999999999999999.
Unplugged