Tengo una capa div
con overflow
establecido en scroll
.javascript: detectar desplazamiento final
Cuando se desplaza hacia la parte inferior de div
, quiero ejecutar una función.
Tengo una capa div
con overflow
establecido en scroll
.javascript: detectar desplazamiento final
Cuando se desplaza hacia la parte inferior de div
, quiero ejecutar una función.
La respuesta aceptada era fundamentalmente defectuosa, desde entonces ha sido eliminado. La respuesta correcta es:
function scrolled(e) {
if (myDiv.offsetHeight + myDiv.scrollTop >= myDiv.scrollHeight) {
scrolledToBottom(e);
}
}
Probado esto en Firefox, Chrome y Opera. Funciona.
¿Puede decirnos por qué es defectuoso? – SpoonMeiser
Como no detecta ningún fin de desplazamiento, detecta cuándo la parte de la página se desplazó hacia arriba y la altura del contenido div es la misma. Supongamos que tiene el doble de contenido para desplazarse que la altura del div, una vez que ha llegado al final, el valor de scrollTop será el doble del tamaño que offsetHeight del contenedor. La respuesta aceptada comprueba si son iguales y no detectará el final. Mi solución comprueba si el scrollTop + la altura del contenedor es igual (o mayor que, sucede) a toda el área desplazable, ¡ahora esa es la parte inferior! –
@Alex 'window.location.href = 'http: //newurl.com';' o 'window.open ('http://newurl.com');' + el código anterior. –
No pude obtener ninguna de las respuestas anteriores para trabajar así que aquí hay una tercera opción que funciona para mí. (Esto se usa con jQuery)
if (($(window).innerHeight() + $(window).scrollTop()) >= $("body").height()) {
//do stuff
}
Espero que esto ayude a alguien!
funcionó perfecto, Gracias – Amir5000
Esto funcionó para mí:
$(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();
}
});
Debe utilizar jQuery 1.6 o superior
he encontrado una alternativa que funciona.
Ninguna de estas respuestas funcionó para mí (actualmente está probando en FireFox 22.0), y después de mucha investigación encontré, lo que parece ser, una solución mucho más limpia y directa.
solución implementada:
function IsScrollbarAtBottom() {
var documentHeight = $(document).height();
var scrollDifference = $(window).height() + $(window).scrollTop();
return (documentHeight == scrollDifference);
}
Saludos
Aceptar He aquí una buena y adecuada solución
Tiene una llamada Div con un id="myDiv"
entonces la función 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
}
}
Tome un vistazo a este ejemplo: MDN Element.scrollHeight
le recomiendo que echa un vistazo a este ejemplo: stackoverflow.com/a/24815216... que implementa un manejo de la acción de desplazamiento a través del navegador.
Usted puede utilizar el siguiente fragmento:
//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");
}
});
Desde innerHeight
no funciona en algunas versiones antiguas de IE, clientHeight
se puede utilizar:
$(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();
}
});
creé una solución basada en evento en función de La respuesta de Bjorn Tipling:
(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));
Y usas la víspera nt así:
document.addEventListener('end-of-page-reached', function(){
console.log('you reached the end of the page');
});
Por cierto: es necesario agregar este CSS para javascript para saber cuánto tiempo la página es
html, body {
height: 100%;
}
Demostración: http://plnkr.co/edit/CCokKfB16iWIMddtWjPC?p=preview
Veo ahora que OP solicitó el final de un div y no el final de la página, pero dejaré la respuesta aquí en caso de que ayude a alguien más. – Pylinux
cheque esta [jsFiddle demo] (http: //jsfiddle.net/lesson8/hjQca/show/) – Sender