Ich habe eine Div-Box (genannt Flux) mit einer variablen Menge an Inhalten. Bei dieser Divbox ist der Überlauf auf Auto eingestellt.
Was ich jetzt versuche, ist, wenn die Verwendung zum Ende dieser DIV-Box scrollen, mehr Inhalt in die Seite laden, weiß ich, wie das geht (lade den Inhalt), aber ich weiß nicht, wie Erkennen, wann der Benutzer zum Ende des div-Tags gescrollt hat? Wenn ich es für die gesamte Seite tun wollte, würde ich .scrollTop nehmen und das von .height subtrahieren.
Aber ich kann das hier nicht tun?
Ich habe versucht, .scrollTop aus dem Fluss zu nehmen und dann den gesamten Inhalt in ein Div mit dem Namen inner zu verpacken. Wenn ich jedoch die innere Höhe des Flusses nehme, werden 564px (das div ist auf 500 als Höhe festgelegt) und die Höhe von 'innner' zurückgegeben. es gibt 1064 zurück und das Scrolltop, wenn am unteren Rand des Div 564 steht.
Was kann ich tun?
quelle
innerHeight()
Dezimalstellen gemeldet. Wenn ein Benutzer herauszoomt, ist die Summe vonscrollTop()
undinnerHeight()
immer mindestens ein Bruchteil vonscrollHeight
. Am Ende habe ich eine Pufferzone von 20px hinzugefügt. Die resultierende Bedingung war,if(el.scrollTop() + el.innerHeight() >= el[0].scrollHeight - 20)
woel
gleich ist$(this)
.Ich habe eine Lösung gefunden, die Sie beim Scrollen Ihres Fensters und am Ende eines von unten angezeigten Divs alarmiert.
Wenn Sie in diesem Beispiel nach unten scrollen, wenn div (
.posts
) fertig ist, erhalten Sie eine Warnung.quelle
var running = false
deklariert. Innerhalb der Bedingung überprüfe ich Aufif(!running) { running = true; // and continue logic }
diese Weise wird es nur einmal aufgerufen! Wenn der AJAX abgeschlossen ist, setzen Sierunning = false;
Obwohl die Frage vor 5,5 Jahren gestellt wurde, ist sie im heutigen UI / UX-Kontext mehr als relevant. Und ich möchte meine zwei Cent hinzufügen.
Quelle: https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollHeight#Determine_if_an_element_has_been_totally_scrolled
Bei einigen Elementen können Sie nicht über die gesamte Höhe des Elements scrollen. In diesen Fällen können Sie verwenden:
quelle
Nur eine zusätzliche Anmerkung hier, da ich diese gefunden habe, als ich nach einer Lösung für ein festes Div gesucht habe, das ich scrollen möchte. Für mein Szenario habe ich festgestellt, dass es vorzuziehen ist, die Polsterung auf dem Div zu berücksichtigen, damit ich das Ende genau treffen kann. Um die Antwort von @ Dr.Molle zu erweitern, füge ich Folgendes hinzu
Das gibt Ihnen den genauen Ort, einschließlich Polsterung und Ränder
quelle
das hat aber bei mir funktioniert
quelle
Wenn Sie dies für ein Div verwenden müssen, dessen Überlauf als ausgeblendet oder gescrollt ist, ist möglicherweise Folgendes erforderlich.
Ich fand, dass Ceil benötigt wurde, weil Prop ScrollHeight zu runden scheint, oder vielleicht aus einem anderen Grund, der dazu führt, dass dies um weniger als 1 abweicht.
quelle
Wenn Sie die Funktion Math.round () nicht verwenden, funktioniert die von Dr.Molle vorgeschlagene Lösung in einigen Fällen nicht, wenn ein Browserfenster über einen Zoom verfügt.
Zum Beispiel $ (this) .scrollTop () + $ (this) .innerHeight () = 600
$ (this) [0] .scrollHeight ergibt = 599.99998
600> = 599.99998 schlägt fehl.
Hier ist der richtige Code:
Sie können auch einige zusätzliche Randpixel hinzufügen, wenn Sie keine strenge Bedingung benötigen
quelle
In der einfachen DOM-Verwendung können Sie den Zustand überprüfen
Wenn ja, dann haben Sie das Ende erreicht.
quelle
Wenn jemand
scrollHeight
als bekommtundefined
, wählen Sie das erste Unterelement der Elemente aus:mob_top_menu[0].scrollHeight
quelle
Ich bin mir nicht sicher, ob es Hilfe ist, aber so mache ich es.
Ich habe ein Indexfenster, das größer als das Fenster ist, und ich lasse es scrollen, bis das Ende dieses Index erreicht ist. Dann fixiere ich es in Position. Der Vorgang wird umgekehrt, sobald Sie zum oberen Rand der Seite scrollen.
Grüße.
quelle
Obwohl dies vor fast 6 Jahren gefragt wurde, vor immer noch heißes Thema im UX-Design, hier ist ein Demo-Snippet, wenn ein Neuling verwenden wollte
quelle
Leute, dies ist die Lösung für das Zoom-Problem. Es funktioniert mit allen Zoomstufen, falls Sie es brauchen:
quelle
Dies ist der Code auf Github.
quelle
Hier ist eine andere Version.
Der Schlüsselcode ist function scroller (), der die Eingabe als Höhe des Divs mit dem Bildlaufabschnitt unter Verwendung von overflow: scroll verwendet. Es beträgt ungefähr 5 Pixel von oben oder 10 Pixel von unten wie oben oder unten. Sonst ist es zu empfindlich. Es scheint, dass 10px ungefähr das Minimum ist. Sie werden sehen, dass die Div-Höhe um 10 erhöht wird, um die untere Höhe zu erhalten. Ich gehe davon aus, dass 5px funktionieren könnte, ich habe nicht ausgiebig getestet. YMMV. scrollHeight gibt die Höhe des inneren Bildlaufbereichs zurück, nicht die angezeigte Höhe des div, die in diesem Fall 400 Pixel beträgt.
quelle