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


224

¿Cómo uso jquery para desplazarme hasta la parte inferior de un iframe o página?

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.


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"
);

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());

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)


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() );
}

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.
}

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();

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.


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

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


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.
Александр Лиссов
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.