2011-04-29 11 views
34

Tengo un div con desbordamiento: desplazamiento.¿Cómo puedo usar JQuery para verificar si un div se desplaza completamente hacia abajo?

Quiero saber si actualmente está desplazado hacia abajo. ¿Cómo, usando JQuery?

Ésta no funciona: How can I determine if a div is scrolled to the bottom?

+2

encontraron esta mediante la búsqueda a través de Google, muy interesante http://yelotofu.com/2008/10/jquery-how-to-tell-if-youre-scroll-to-bottom/ –

+0

se puede explicar lo sucede donde el enlace que has dado no funciona? tal vez agregar un margen de beneficio también? –

Respuesta

65

Aquí está la solución correcta (jsfiddle). Un breve vistazo al código:

$(document).ready(function() { 
    $('div').bind('scroll', chk_scroll); 
}); 

function chk_scroll(e) { 
    var elem = $(e.currentTarget); 
    if (elem[0].scrollHeight - elem.scrollTop() == elem.outerHeight()) { 
     console.log("bottom"); 
    } 
} 

Ver this para obtener más información.

+8

Aquí hay una demostración con un molesto 'alerta()': http://jsfiddle.net/Blender/aBc3h/7/ – Blender

+2

gracias @blender – samccone

+0

Esta es una excelente solución. Estoy trabajando en una solución donde el div que contiene el contenido es redimensionable, y necesito volver a verificar el estado del scroll cada vez que se cambia el tamaño del div, ya que no se dispara cada vez. ¿Hay algún evento para eso? – SoonDead

4

Usted puede hacer que al

(scrollHeight - scrollTop()) == outerHeight() 

Aplicar requiere la sintaxis de jQuery, por supuesto ...

0

Aquí está el código:

$("#div_Id").scroll(function (e) { 
    e.preventDefault(); 
    var elem = $(this);    
    if (elem.scrollTop() > 0 && 
      (elem[0].scrollHeight - elem.scrollTop() == elem.outerHeight())) { 
     alert("At the bottom"); 
    } 
}); 
1

Since 2012 Firefox contiene la propiedad scrollTopMax. Si scrollTop === scrollTopMax está en la parte inferior del elemento.

+0

Interesante, aunque no es compatible con ningún navegador (¿y parece que nunca lo será?) –

11
function isScrolledToBottom(el) { 
    var $el = $(el); 
    return el.scrollHeight - $el.scrollTop() - $el.outerHeight() < 1; 
} 

Esta es una variación de la respuesta de @samccone que incorpora el comentario de @ HenrikChristensen con respecto a las mediciones de subpíxeles.

+2

Esta es LA única respuesta que funciona correctamente en Chrome en todo momento. Con otras respuestas, a veces funciona en Chrome y otras no (Firefox no tiene este problema de subpixel y siempre funciona independientemente). – OMA

+1

Éste trabajó para mí. Gracias – OST

+0

Muy bien, esta solución agrega todos los consejos de los comentarios anteriores. ¡Gracias! –

0

Sin jQuery, para el evento OnScroll

var scrollDiv = event.srcElement.body 
window.innerHeight + scrollDiv.scrollTop == scrollDiv.scrollHeight 
0

ya que funciona sin jQuery así:

var isBottom = node.scrollTop + node.offsetHeight === node.scrollHeight; 

hago:

var node = $('#mydiv')[0]; // gets the html element 
if(node) { 
    var isBottom = node.scrollTop + node.offsetHeight === node.scrollHeight; 
} 
0

Para mí $el.outerHeight() da el valor incorrecto (debido al ancho del borde), mientras que $el.innerHeight() da la correcta, entonces uso

function isAtBottom($el){ 

    return ($el[0].scrollHeight - $el.scrollTop()) == $el.innerHeight(); 
} 
Cuestiones relacionadas