Ich habe eine div
Schicht mit overflow
auf scroll
gesetzt.javascript: scroll end erkennen
Wenn ich bis zum Ende der div
scrollte, möchte ich eine Funktion ausführen.
Ich habe eine div
Schicht mit overflow
auf scroll
gesetzt.javascript: scroll end erkennen
Wenn ich bis zum Ende der div
scrollte, möchte ich eine Funktion ausführen.
Die Antwort akzeptiert war grundlegend fehlerhaft, hat es seit gelöscht. Die richtige Antwort lautet:
function scrolled(e) {
if (myDiv.offsetHeight + myDiv.scrollTop >= myDiv.scrollHeight) {
scrolledToBottom(e);
}
}
Getestet in Firefox, Chrome und Opera. Es klappt.
Können Sie uns wissen lassen, warum es fehlerhaft ist? – SpoonMeiser
Da das Scroll-Ende überhaupt nicht erkannt wird, erkennt es, wenn der Teil der Seite, der nach oben scrollt, und die Höhe des enthaltenen Div gleich sind! Nehmen wir an, Sie haben doppelt so viel Inhalt wie die Höhe des div, bis der scrollTop-Wert doppelt so groß ist wie die offsetHeight des Containers. Die akzeptierte Antwort prüft, ob diese gleich sind und das Ende wird nicht erkannt. Meine Lösung prüft, ob der scrollTop + die Höhe des Containers gleich (oder größer als der gesamte scrollbare Bereich) ist, jetzt ist das der untere Bereich! –
@Alex 'window.location.href = 'http: //newurl.com';' oder 'window.open ('http://newurl.com');' + der obige Code. –
Ich konnte keine der oben genannten Antworten erhalten, also hier ist eine dritte Option, die für mich funktioniert! (Dies wird mit jQuery verwendet)
if (($(window).innerHeight() + $(window).scrollTop()) >= $("body").height()) {
//do stuff
}
Hoffe, das hilft jedem!
hat perfekt funktioniert, Danke – Amir5000
Das ist für mich gearbeitet:
$(window).scroll(function() {
buffer = 40 // # of pixels from bottom of scroll to fire your function. Can be 0
if ($(".myDiv").prop('scrollHeight') - $(".myDiv").scrollTop() <= $(".myDiv").height() + buffer) {
doThing();
}
});
Must verwenden jQuery 1.6 oder höher
fand ich eine Alternative, die funktioniert.
Keiner dieser Antworten funktionierte für mich (derzeit Test in FireFox 22.0), und nach viel Forschung fand ich, was scheint, eine viel sauberere und unkomplizierte Lösung.
Implementiert Lösung:
function IsScrollbarAtBottom() {
var documentHeight = $(document).height();
var scrollDifference = $(window).height() + $(window).scrollTop();
return (documentHeight == scrollDifference);
}
Grüße
OK Dies ist eine gute und richtige Lösung
Sie haben einen Div Anruf mit einem id="myDiv"
also die Funktion g oes.
function GetScrollerEndPoint()
{
var scrollHeight = $("#myDiv").prop('scrollHeight');
var divHeight = $("#myDiv").height();
var scrollerEndPoint = scrollHeight - divHeight;
var divScrollerTop = $("#myDiv").scrollTop();
if(divScrollerTop === scrollerEndPoint)
{
//Your Code
//The Div scroller has reached the bottom
}
}
Werfen Sie einen Blick auf dieses Beispiel: MDN Element.scrollHeight
Ich empfehle, dass dieses Beispiel finden Sie unter: stackoverflow.com/a/24815216..., die eine Cross-Browser für die Scroll-Aktion Handling implementiert.
Sie können die folgenden Ausschnitt verwenden:
//attaches the "scroll" event
$(window).scroll(function (e) {
var target = e.currentTarget,
scrollTop = target.scrollTop || window.pageYOffset,
scrollHeight = target.scrollHeight || document.body.scrollHeight;
if (scrollHeight - scrollTop === $(target).innerHeight()) {
console.log("► End of scroll");
}
});
Da innerHeight
nicht in einigen alten IE-Versionen funktioniert, kann clientHeight
verwendet werden:
$(window).scroll(function (e){
var body = document.body;
//alert (body.clientHeight);
var scrollTop = this.pageYOffset || body.scrollTop;
if (body.scrollHeight - scrollTop === parseFloat(body.clientHeight)) {
loadMoreNews();
}
});
Ich habe eine basierte Lösung Ereignis basierend auf Bjorn Tiplings Antwort:
(function(doc){
'use strict';
window.onscroll = function (event) {
if (isEndOfElement(doc.body)){
sendNewEvent('end-of-page-reached');
}
};
function isEndOfElement(element){
//visible height + pixel scrolled = total height
return element.offsetHeight + element.scrollTop >= element.scrollHeight;
}
function sendNewEvent(eventName){
var event = doc.createEvent('Event');
event.initEvent(eventName, true, true);
doc.dispatchEvent(event);
}
}(document));
Und Sie verwenden den Vorabend nt wie folgt aus:
document.addEventListener('end-of-page-reached', function(){
console.log('you reached the end of the page');
});
BTW: Sie müssen diese CSS für Javascript hinzufügen zu wissen, wie lange die Seite
html, body {
height: 100%;
}
Ich sehe jetzt, dass das OP nach Ende eines div und nicht am Ende der Seite gefragt hat, aber ich werde die Antwort hier lassen, falls es jemand anderem hilft. – Pylinux
Prüfung dieses [jsfiddle Demo] (http: //jsfiddle.net/lesson8/hjQca/show/) – Sender