Ho uno strato div
con overflow
impostato su scroll
.javascript: detect scroll end
Quando si scorre verso la parte inferiore del div
, voglio eseguire una funzione.
Ho uno strato div
con overflow
impostato su scroll
.javascript: detect scroll end
Quando si scorre verso la parte inferiore del div
, voglio eseguire una funzione.
La risposta accettata era fondamentalmente errata, da allora è stato cancellato. La risposta corretta è:
function scrolled(e) {
if (myDiv.offsetHeight + myDiv.scrollTop >= myDiv.scrollHeight) {
scrolledToBottom(e);
}
}
Testato in Firefox, Chrome e Opera. Funziona.
Puoi farci sapere perché è difettoso? – SpoonMeiser
Poiché non rileva affatto lo scorrimento, rileva quando quando la parte della pagina scorre verso l'alto e l'altezza del div contenente è la stessa! Supponiamo di avere il doppio del contenuto da scorrere rispetto all'altezza del div, una volta raggiunta la fine, il valore scrollTop sarà il doppio delle dimensioni dell'offsetHeight del contenitore. La risposta accettata verifica se questi sono uguali e non rileva la fine. La mia soluzione controlla se lo scrollTop + l'altezza del contenitore è uguale a (o maggiore di, succede) l'intera area scorrevole, ora è il fondo! –
@Alex 'window.location.href = 'http: //newurl.com';' o 'window.open ('http://newurl.com');' + il codice sopra. –
Non ho potuto ottenere nessuna delle risposte precedenti per funzionare quindi ecco una terza opzione che funziona per me! (Questo è usato con jQuery)
if (($(window).innerHeight() + $(window).scrollTop()) >= $("body").height()) {
//do stuff
}
Spero che questo aiuti chiunque!
ha funzionato perfettamente, Grazie – Amir5000
questo ha funzionato per me:
$(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();
}
});
Deve usare jQuery 1.6 o superiore
ho trovato un'alternativa che funziona.
Nessuna di queste risposte ha funzionato per me (attualmente in prova in FireFox 22.0) e, dopo molte ricerche, ho trovato, a quanto pare, una soluzione molto più pulita e immediata.
soluzione implementata:
function IsScrollbarAtBottom() {
var documentHeight = $(document).height();
var scrollDifference = $(window).height() + $(window).scrollTop();
return (documentHeight == scrollDifference);
}
saluti
OK Ecco una buona e corretta soluzione
Hai una chiamata Div con una id="myDiv"
quindi la funzione 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
}
}
Date un'occhiata a questo esempio: MDN Element.scrollHeight
vi consiglio di controllare questo esempio: stackoverflow.com/a/24815216... che implementa una gestione per l'azione di scorrimento cross-browser.
È possibile utilizzare il seguente frammento:
//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");
}
});
Dal innerHeight
non funziona in alcune vecchie versioni di IE, clientHeight
può essere utilizzato:
$(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();
}
});
ho creato una soluzione basata evento sulla base di Bjorn Tipling's answer:
(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));
E tu usi la vigilia nt in questo modo:
document.addEventListener('end-of-page-reached', function(){
console.log('you reached the end of the page');
});
BTW: è necessario aggiungere questo CSS per javascript sapere quanto tempo la pagina è
html, body {
height: 100%;
}
Ora vedo che l'OP chiedeva la fine di un div e non la fine della pagina, ma lascerò qui la risposta nel caso in cui aiuti qualcun altro. – Pylinux
controllo questo [jsfiddle demo] (http: //jsfiddle.net/lesson8/hjQca/show/) – Sender