Desplácese hasta la parte inferior de Div en la carga de la página (jQuery)

238

Tengo un div en mi página:

<div id='div1' style='overflow:scroll;overflow-x:hidden;max-height:200px;'></div>

¿Cómo puedo hacer que el div se desplace hacia la parte inferior del div? No la página, solo el DIV.

DobotJr
fuente

Respuestas:

610

Las otras soluciones aquí en realidad no funcionan para divs con mucho contenido: "maximiza" desplazándose hacia abajo hasta la altura del div (en lugar de la altura del contenido del div). Entonces funcionarán, a menos que tenga más del doble de la altura del div en contenido dentro de él.

Aquí está la versión correcta:

$('#div1').scrollTop($('#div1')[0].scrollHeight);

o versión jQuery 1.6+:

var d = $('#div1');
d.scrollTop(d.prop("scrollHeight"));

O animado:

$("#div1").animate({ scrollTop: $('#div1').prop("scrollHeight")}, 1000);
Mike Todd
fuente
55
Esto también funciona: $ ('# div1'). ScrollTop ($ ('# div1'). Attr ("scrollHeight"));
Mike Todd
2
¿Cómo hacer que esto funcione sin establecer una altura absoluta (en px) en div1?
znat
¡Bien hecho! Estaba buscando un fragmento para desplazarme y todo lo que pude encontrar fue desplazarse por la página (html, body). Esta es una gran solución y usar scrollHeight es una excelente manera de asegurarse de que siempre llegue al fondo.
Kevin Marmet
increíble, el segundo funciona así:d = $('#div1'); $(d).scrollTop( $(d).prop("scrollHeight") );
loretoparisi
56

Todas las respuestas que puedo ver aquí, incluida la actualmente "aceptada", en realidad son incorrectas en el sentido de que establecen:

scrollTop = scrollHeight

Mientras que el enfoque correcto es establecer:

scrollTop = scrollHeight - clientHeight

En otras palabras:

$('#div1').scrollTop($('#div1')[0].scrollHeight - $('#div1')[0].clientHeight);

O animado:

$("#div1").animate({
  scrollTop: $('#div1')[0].scrollHeight - $('#div1')[0].clientHeight
}, 1000);
patspam
fuente
Tengo un div con una altura establecida y un desbordamiento establecido en automático. Las respuestas animadas funcionaron, pero esta es la única solución no animada que en realidad se desplazaría hasta la parte inferior del "contenido", no la altura establecida del div. ¡Bravo!
Darkloki
23

ACTUALIZACIÓN: vea la solución de Mike Todd para obtener una respuesta completa.


$("#div1").animate({ scrollTop: $('#div1').height()}, 1000);

si quieres que esté animado (más de 1000 milisegundos).

$('#div1').scrollTop($('#div1').height())

si lo quieres instantáneo

Alexis Pigeon
fuente
8
¡Incorrecto! .height () está limitado al área mostrada, .prop ("scrollHeight") es la altura real de div.
Puntero nulo el
55
¡Absolutamente! Es por eso que la respuesta de Mike Todd es la aceptada, no la mía.
Alexis Pigeon
15
$(window).load(function() {
  $("html, body").animate({ scrollTop: $(document).height() }, 1000);
});

Esto toma la altura de la página y la desplaza hacia abajo una vez que se ha cargado la ventana. Cambie 1000a lo que necesite para hacerlo más rápido / más lento una vez que la página esté lista.

Acordes
fuente
Esto desplaza toda la página, ¿verdad? Solo quiero que el div se desplace hacia la parte inferior del div.
DobotJr
2
Touche misma lógica, diferente selector.
Acordes
7

prueba esto:

$('#div1').scrollTop( $('#div1').height() )
indefinido
fuente
5

Desplácese por la ventana hasta el final del objetivo div.

function scrollToBottom(id){
  div_height = $("#"+id).height();
  div_offset = $("#"+id).offset().top;
  window_height = $(window).height();
  $('html,body').animate({
    scrollTop: div_offset-window_height+div_height
  },'slow');
}

scrollToBottom('call_div_id');
jenking
fuente
5

Lo siguiente funcionará. Tenga en cuenta [0]yscrollHeight

$("#myDiv").animate({ scrollTop: $("#myDiv")[0].scrollHeight }, 1000);
Lal Kokkat
fuente
5

para animar en jquery (versión> 2.0)

var d = $('#div1');
d.animate({ scrollTop: d.prop('scrollHeight') }, 1000);
dpineda
fuente
4

Ninguno de estos funcionó para mí, tengo un sistema de mensajes dentro de una aplicación web que es similar a Facebook Messenger y quería que los mensajes aparecieran en la parte inferior de un div.

Esto funcionó de maravilla, Javascript básico.

window.onload=function () {
     var objDiv = document.getElementById("MyDivElement");
     objDiv.scrollTop = objDiv.scrollHeight;
}
James Blachford
fuente
1
Probablemente no tenga instalado jQuery. Estás trabajando con dom nativo, están usando jQuery. jquery.com
csga5000
Solución muy cuidada y elegante.
Divyanshu Das
2

Estoy trabajando en una base de código heredada que intenta migrar a Vue.

En mi situación específica (div desplazable envuelto en un modo de arranque), un v-if mostró contenido nuevo, al que quería que la página se desplazara hacia abajo. Para que este comportamiento funcione, tuve que esperar a que vue termine de volver a renderizar y luego usar jQuery para desplazarme hasta la parte inferior del modal.

Entonces...

this.$nextTick(function() {
    $('#thing')[0].scrollTop = $('#thing')[0].scrollHeight;
})
Mavrick Laakso
fuente
0

Puede usar el siguiente código para desplazarse hasta la parte inferior del div en la carga de la página.

$(document).ready(function(){
  $('div').scrollTop($('div').scrollHeight);
});
Manish Nagdewani
fuente
0

Puede verificar scrollHeight y clientHeight con scrollTop para desplazarse hasta la parte inferior del div como el código a continuación.

$('#div').scroll(function (event) {
  if ((parseInt($('#div')[0].scrollHeight) - parseInt(this.clientHeight)) == parseInt($('#div').scrollTop())) 
  {
    console.log("this is scroll bottom of div");
  }
  
});

Nghi
fuente
siempre pruebe su código antes de proporcionar las soluciones.
Lakshmi
-2

Cuando se carga la página, el desplazamiento es el valor máximo.

Este es un cuadro de mensaje cuando el usuario envía un mensaje y luego muestra el último chat hacia abajo para que el valor de desplazamiento siempre sea máximo.

$('#message').scrollTop($('#message')[0].scrollHeight);

ver imagen

chandan singh
fuente