Wie erhalte ich die Bildlaufposition eines Dokuments?

82

Wie erhalte ich den Bildlaufpositionswert eines Dokuments?

Jemandem
quelle

Antworten:

46
$(document).height() //returns window height

$(document).scrollTop() //returns scroll position from top of document
Bob Gregor
quelle
Ich habe genauso gedacht, aber warum unterscheidet sich console.log ($ (this) .scrollTop ()) = 1187 console.log ($ (this) .height ()) = 1762 so stark? Für 575px, wenn ich zum Ende der Seite gescrollt habe. Wo sind diese 575px geblieben? Bildlaufleiste kann nicht 576px sein :)
Jemand
3
Baaah wieder meine Schuld. Ich schaute auf die Bildlaufleiste mit geöffnetem Firebug-Fenster. Ofc kann es jetzt 576px sein. :) Danke, ich denke, das Thema ist geschlossen.
Jemand
101
-1 - Das ist sehr schön, beantwortet aber nicht die Frage, um die es ging scrollHeight.
Wayne
8
Richtig, das ist eine Frage. Aber weder $ (Dokument) .height () noch $ (Dokument) .scrollTop () geben die gewünschten Informationen. Die Anfrage war für scrollHeight. Der Wert scrollHeight ist die Gesamthöhe, die einem Element zur Verfügung steht (wenn es scrollbar ist, ist dieser Wert möglicherweise größer als seine Höhe). scrollTop gibt zurück, wie weit das Element von oben entfernt wäre. Weder antworten, wie hoch die insgesamt verfügbare Höhe ist. Siehe help.dottoro.com/ljbixkkn.php für das Verständnis von scrollHeight
teynon
4
Dies wird als Antwort markiert, da es die beabsichtigte Frage des Fragestellers beantwortet, bei der es um die Höhe ging, in der das Dokument gerade gescrollt wird ... also "scrollHeight". Es ist ein Zufall, dass dieser Name in einem anderen Kontext verwendet wird.
Chase Sandmann
177

So erhalten Sie das scrollHeightElement, das Sie mit einem jQuery-Selektor erhalten haben:

$(selector)[0].scrollHeight

Wenn selectordie ID des Elements (z. B. elemId) angegeben ist, ist garantiert, dass das 0-indizierte Element des Arrays das Element ist, das Sie auswählen möchten, und scrollHeightkorrekt ist.

Demwis
quelle
12
Seien Sie vorsichtig, laut der Mozilla-Wissensdatenbank wird es nicht von IE-Versionen unterstützt, die kleiner als die Version 8.0 sind. Developer.mozilla.org/en/DOM/element.scrollHeight
Emanuele Del Grande
2
Verwenden Sie in Übereinstimmung mit @Tomas die Abstraktion von jQuery, um besser mit browserübergreifenden Macken umgehen zu können. Zum Beispiel kann das Obige in $ (Selektor) .offset (). Top geändert werden
Bob Gregor
3
Ähm, kein $ (Dokument) .offset () gibt null zurück, und .offset () hat nichts mit der Position der Bildlaufleisten des Browsers zu tun (.offset () gibt Koordinaten von Elementen relativ zum Dokument zurück). Ich bin damit einverstanden, dass wir jQuery verwenden sollten, wenn dies möglich ist. Da dies jedoch keine browserübergreifende Unterstützung bietet, bietet jQuery keine Abstraktion dafür.
BrainSlugs83
2
Sie können auch $ (Selektor) .get (0) .scrollHeight
Ally
1
@Dmitri Zaitsev .scrollHeight ist eine DOM-Knoteneigenschaft, keine jQuery-Eigenschaft.
Zemljoradnik
45

Wenn Sie Jquery 1.6 oder höher verwenden, verwenden Sie prop, um auf den Wert zuzugreifen.

$(document).prop('scrollHeight')

In früheren Versionen wurde der Wert von attr abgerufen, jedoch nicht nach 1.6.

Ankit
quelle
12
Dies gibt für mich mit jQuery 1.7.1 "undefined" zurück, ebenso wie $ (document) .attr ("scrollHeight").
Michael
5
Das liegt daran, dass das Körperelement fehlt. Es muss $ (document.body) .prop ('scrollHeight') sein - an diesem Punkt können Sie auch einfach document.body.scrollHeight verwenden.
Goddogsrunning
6
document.getElementById("elementID").scrollHeight

$("elementID").scrollHeight
Sachin R.
quelle
Was ist die Element-ID Ihres Dokumentobjekts? ... vielleicht meinten Sie "document.body.scrollHeight"?
BrainSlugs83
2
$ ('# gallery'). scrollHeight gibt mir undefinierte // # Galerie ist ID meines Überlaufs: Auto-Element, funktioniert nicht
Anmol Saraf
6

Es werden HTML-DOM-Elemente verwendet, jedoch kein jQuery-Selektor. Es kann verwendet werden wie:

var height = document.body.scrollHeight;
aqua
quelle
3

So etwas sollte Ihr Problem lösen:

$.getDocHeight = function(){
     var D = document;
     return Math.max(Math.max(D.body.scrollHeight,    D.documentElement.scrollHeight), Math.max(D.body.offsetHeight, D.documentElement.offsetHeight), Math.max(D.body.clientHeight, D.documentElement.clientHeight));
};

alert( $.getDocHeight() );

Ps: Rufen Sie diese Funktion jedes Mal auf, wenn Sie sie benötigen. Die Warnung dient zu Testzwecken.

Zuul
quelle
Aus irgendeinem Grund funktioniert diese Funktion bei mir nicht richtig. Verwenden Sie es in einem Iframe. Die tatsächliche Höhe von <html> beträgt 256 Pixel, diese Funktion gibt mir 337 Pixel und ich habe keine Ahnung, woher sie kommt. PS Ich benutze Chrome 18.
Jurchiks
@jurchiks: Hast du einen Link zu dem Ort, an dem sich dieser Iframe befindet, damit ich ihn mir ansehen kann?
Zuul
klingen.dateks.lv/salidzinat?ids=58664,43586 . Klicken Sie auf eines der Fragezeichen. Ich habe es geschafft, das meiste davon zu reparieren, aber zwei davon (und es gibt mehr, abhängig von den verglichenen Elementen) haben immer noch einen seltsamen, mysteriösen ~ 20px-Rand am unteren Rand. Es verschwindet jedoch, wenn ich die Größe des Fensters verändere, da ich die Popup-Abmessungen beim Ändern der Fenstergröße geändert habe.
Jurchiks
3

Um die tatsächliche scrollbare Höhe der Bereiche zu erhalten, die von der Fenster-Bildlaufleiste gescrollt werden, habe ich verwendet $('body').prop('scrollHeight'). Dies scheint die einfachste Arbeitslösung zu sein, aber ich habe die Kompatibilität nicht ausführlich überprüft. Emanuele Del Grande merkt an, dass dies für IE unter 8 wahrscheinlich nicht funktioniert.

Die meisten anderen Lösungen funktionieren gut für scrollbare Elemente, dies funktioniert jedoch für das gesamte Fenster. Insbesondere hatte ich das gleiche Problem wie Michael für Ankits Lösung, nämlich das, was $(document).prop('scrollHeight')zurückkehrt undefined.

acjay
quelle
1

Versuche dies:

var scrollHeight = $(scrollable)[0] == document ? document.body.scrollHeight : $(scrollable)[0].scrollHeight;
Dmitry Komin
quelle
0

Sie können dies beispielsweise versuchen. Mit diesem Code wird die Bildlaufleiste für alle DIV-Tags unten angezeigt

Denken Sie daran: jQuery kann eine Funktion anstelle des Werts als Argument akzeptieren. "this" ist das von jQuery behandelte Objekt. Die Funktion gibt die scrollHeight-Eigenschaft des aktuellen DIV "this" zurück und führt dies für alle DIV im Dokument aus.

$("div").scrollTop(function(){return this.scrollHeight})
Steve
quelle