jQuery Desplazarse hasta la parte inferior de la página / iframe

Respuestas:

360

Si desea un buen desplazamiento lento de animación, cualquier ancla con href="#bottom"esto lo desplazará hasta la parte inferior:

$("a[href='#bottom']").click(function() {
  $("html, body").animate({ scrollTop: $(document).height() }, "slow");
  return false;
});

Siéntase libre de cambiar el selector.

Mark Ursino
fuente
48
Esto funciona en Firefox 3.5.7 pero no en Chrome 4.0.295.0. Lo siguiente funciona en Chrome: $ ('html, body'). Animate ({scrollTop: $ (document) .height ()}, 'slow');
Tom
1
@Tom, ¡no puedo ver la diferencia entre tu solución y la de Mark!
Muhammad Gelbana
44
@MuhammadGelbana verifique la fecha de edición. Parece que Mark actualizó su respuesta para incluir la solución de Tom.
Paul Parker
En realidad no hay necesidad de obtener la altura del elemento: stackoverflow.com/a/44578849/1450294
Michael Scheper
210

scrollTop () devuelve el número de píxeles que están ocultos a la vista desde el área de desplazamiento, por lo que le da:

$(document).height()

en realidad sobrepasará la parte inferior de la página. Para que el desplazamiento realmente 'pare' en la parte inferior de la página, la altura actual de la ventana del navegador necesita restar. Esto permitirá el uso de flexibilización si es necesario, por lo que se convierte en:

$('html, body').animate({ 
   scrollTop: $(document).height()-$(window).height()}, 
   1400, 
   "easeOutQuint"
);
Tom Bates
fuente
29
Esta debería ser la respuesta aceptada, Tom tiene toda la razón, la respuesta aceptada no funciona bien ya que el desplazamiento se detendrá abruptamente en lugar de procesar el final de la relajación.
Christian
33
Nota: easeOutQuintrequiere un complemento, jQuery solo tiene lineary swing.
newenglander
amigo esto es bueno! Gracias. incluso hacer esto con 'swing' en lugar de 'easeoutquint' muestra diferencias notables '.
Jesse Head
No estoy seguro de si es una mala forma, pero edité la respuesta aceptada para agregar un puntero a esta respuesta. Si es así, entonces alguien puede revertirlo.
xaxxon
Esta solución solo funciona si la página se interpreta en el modo compatible con un estándar. Por ejemplo, si no incluye el <!DOCTYPE html>en Chrome, Chrome devolverá el mismo valor exacto para la ventana y la altura del documento, en cuyo caso $(document).height()-$(window).height()siempre devolverá 0. Vea aquí: stackoverflow.com/questions/12103208/…
VKK
35

Por ejemplo:

$('html, body').scrollTop($(document).height());
Tatu Ulmanen
fuente
Parece que no puedo hacer que eso funcione. No hace nada en absoluto.
Adam
@adam ¿Qué versión de jQuery estás usando?
Sonny Boy
14

Después de que este hilo no funcionó para mí para mi necesidad específica (desplazarse dentro de un elemento en particular, en mi caso, un área de texto) descubrí esto en el más allá, lo que podría ser útil para alguien más que lea esta discusión:

Alternativa en planetcloud

Como ya tenía una versión en caché de mi objeto jQuery ( myPanelen el código a continuación está el objeto jQuery), el código que agregué a mi controlador de eventos fue simplemente esto:

myPanel.scrollTop(myPanel[0].scrollHeight - myPanel.height());

(gracias Ben)

Greg Pettit
fuente
1
Me funcionó con un div:var d = $('#mydiv'); d.scrollTop (d[0].scrollHeight - d.height ());
gregn3
¿Realmente tienes que hacer los cálculos? stackoverflow.com/a/44578849/1450294
Michael Scheper
4

Una función simple que salta (se desplaza instantáneamente) al final de toda la página. Utiliza el incorporado .scrollTop(). No he intentado adaptar esto para trabajar con elementos de página individuales.

function jumpToPageBottom() {
    $('html, body').scrollTop( $(document).height() - $(window).height() );
}
Rory O'Kane
fuente
2
No sé por qué, pero esto no funcionó para mí en Firefox 26.0, y se desplazaría a la parte superior cuando se ejecutara esta función. Este problema se resolvió diciendo$(document).scrollTop($(document).height());
Jack
2

Este funcionó para mí:

var elem = $('#box');
if (elem[0].scrollHeight - elem.scrollTop() == elem.outerHeight()) {
  // We're at the bottom.
}
Montaña
fuente
Esto no responde la pregunta
huyz
2

Si no te importa la animación, entonces no tienes que obtener la altura del elemento. Al menos en todos los navegadores que he probado, si le das scrollTopun número que es más grande que el máximo, simplemente se desplazará hacia abajo. Así que dale el mayor número posible:

$(myScrollingElement).scrollTop(Number.MAX_SAFE_INTEGER);

Si desea desplazarse por la página, en lugar de algún elemento con una barra de desplazamiento, simplemente haga que sea myScrollingElementigual a 'cuerpo, html'.

Como necesito hacer esto en varios lugares, he escrito una función jQuery rápida y sucia para que sea más conveniente, así:

(function($) {
  $.fn.scrollToBottom = function() {
    return this.each(function (i, element) {
      $(element).scrollTop(Number.MAX_SAFE_INTEGER);
    });
  };
}(jQuery));

Entonces puedo hacer esto cuando agrego cosas de buncho:

$(myScrollingElement).append(lotsOfHtml).scrollToBottom();
Michael Scheper
fuente
0

Los guiones mencionados en respuestas anteriores, como:

$("body, html").animate({
    scrollTop: $(document).height()
}, 400)

o

$(window).scrollTop($(document).height());

no funcionará en Chrome y estará nervioso en Safari en caso de que la html etiqueta en CSS tenga overflow: auto;establecida la propiedad. Me llevó casi una hora darme cuenta.

Ilia Rostovtsev
fuente
0
$('.block').scrollTop($('.block')[0].scrollHeight);

Uso este código para desplazar el chat cuando llegan nuevos mensajes.

Александр Лиссов
fuente
Incluya alguna explicación para su código, especialmente cuando copie desde su propia base de código, utilizando clases CSS que no son relevantes para otras personas;)
Bruno Monteiro
Tome cualquier bloque con una barra de desplazamiento;) o todo el documento.
Александр Лиссов