jquery: $ (ventana) .scrollTop () pero no $ (ventana) .scrollBottom ()

86

Quiero colocar un elemento al final de la página cada vez que el usuario se desplaza por la página. Es como una "posición fija" pero no puedo usar "position: fixed" css ya que muchos de los navegadores de mis clientes no pueden soportar eso.

Noté que jquery puede obtener la posición superior actual de la ventana gráfica, pero ¿cómo puedo obtener la parte inferior de la ventana gráfica de desplazamiento?

Entonces estoy preguntando cómo saber: $ (ventana) .scrollBottom ()

Bin Chen
fuente

Respuestas:

148
var scrollBottom = $(window).scrollTop() + $(window).height();
David Tang
fuente
17
pensaría que si es tan simple como esto, podría incluirse en el marco principal como .scrollBottom (). Extraño ...
Curt
38
el desplazamiento Topes el número de píxeles verticales del documento Topa la ventana visible Top. Como exactamente lo opuesto al desplazamiento Top, el desplazamiento Bottomdebe medir el número de píxeles verticales desde el documento Bottomhasta la ventana visible Bottom(es decir, la respuesta de Alfred a continuación). Lo que esto da es el número de píxeles verticales del documento _top_a la ventana visible Bottom. Es útil con seguridad, aunque no puedo llamarlo lo contrario a ScrollBottom (sé que esta es una respuesta marcada, pero para futuros lectores como yo)
DeepSpace101
1
Esta solución no funcionará si la distancia desde la parte superior puede variar. Por ejemplo, si tengo un <div> que tiene que estar a cierta distancia de la parte inferior de la página y la página tiene elementos expandibles / plegables, cambiará la altura del cuerpo y, por lo tanto, la distancia desde la parte inferior.
accidente springfield
@crashspringfield En realidad, esa es una pregunta diferente. Esta pregunta se trata de colocar cosas cerca de la parte inferior de la ventana gráfica, no en la parte inferior de la página.
iPherian
88

Yo diría que un scrollBottom como un opuesto directo de scrollTop debería ser:

var scrollBottom = $(document).height() - $(window).height() - $(window).scrollTop();

Aquí hay una pequeña prueba fea que funciona para mí:

// SCROLLTESTER START //
$('<h1 id="st" style="position: fixed; right: 25px; bottom: 25px;"></h1>').insertAfter('body');

$(window).scroll(function () {
  var st = $(window).scrollTop();
  var scrollBottom = $(document).height() - $(window).height() - $(window).scrollTop();

  $('#st').replaceWith('<h1 id="st" style="position: fixed; right: 25px; bottom: 25px;">scrollTop: ' + st + '<br>scrollBottom: ' + scrollBottom + '</h1>');
});
// SCROLLTESTER END //
Alfredo
fuente
2
Perfecto, esto es lo que estaba buscando ... ¡Gracias!
ℛɑƒæĿᴿᴹᴿ
9

Para el futuro, he convertido scrollBottom en un complemento jquery, utilizable de la misma manera que scrollTop (es decir, puede establecer un número y desplazará esa cantidad desde la parte inferior de la página y devolverá el número de píxeles desde la parte inferior de la página, o devolver el número de píxeles de la parte inferior de la página si no se proporciona ningún número)

$.fn.scrollBottom = function(scroll){
  if(typeof scroll === 'number'){
    window.scrollTo(0,$(document).height() - $(window).height() - scroll);
    return $(document).height() - $(window).height() - scroll;
  } else {
    return $(document).height() - $(window).height() - $(window).scrollTop();
  }
}
//Basic Usage
$(window).scrollBottom(500);
Céfiro
fuente
4
var scrollBottom =
    $(document).height() - $(window).height() - $(window).scrollTop();

Creo que es mejor obtener el desplazamiento inferior.

pb2q
fuente
2

Esto se desplazará hasta la parte superior:

$(window).animate({scrollTop: 0});

Esto se desplazará hasta el final:

$(window).animate({scrollTop: $(document).height() + $(window).height()});

.. cambie la ventana a su ID de contenedor o clase deseada si es necesario (entre comillas).

Snoop Dog
fuente
¿Cómo animar hasta la parte inferior de un div de altura fija con overflow-y: autopara que realmente se desplace hasta la parte inferior del texto (que se extiende más allá de la altura del div)?
user1063287
Actualice mi pregunta en caso de que ayude a alguien más: creo que la propiedad a usar podría ser scrollHeight: consulte: stackoverflow.com/q/7381817
user1063287
0

Aquí está la mejor opción para desplazarse hacia abajo para la cuadrícula de la tabla, se desplazará hasta la última fila de la cuadrícula de la tabla:

 $('.add-row-btn').click(function () {
     var tempheight = $('#PtsGrid > table').height();
     $('#PtsGrid').animate({
         scrollTop: tempheight
         //scrollTop: $(".scroll-bottom").offset().top
     }, 'slow');
 });
SantoshK
fuente
0
// Back to bottom button
$(window).scroll(function () {
    var scrollBottom = $(this).scrollTop() + $(this).height();
    var scrollTop = $(this).scrollTop();
    var pageHeight = $('html, body').height();//Fixed

    if ($(this).scrollTop() > pageHeight - 700) {
        $('.back-to-bottom').fadeOut('slow');
    } else {
        if ($(this).scrollTop() < 100) {
            $('.back-to-bottom').fadeOut('slow');
        }
        else {
            $('.back-to-bottom').fadeIn('slow');
        }
    }
});
$('.back-to-bottom').click(function () {
    var pageHeight = $('html, body').height();//Fixed
    $('html, body').animate({ scrollTop: pageHeight }, 1500, 'easeInOutExpo');
    return false;
});
Ghebrehiywet
fuente
0

tratar:

 $(window).scrollTop( $('body').height() );
usuario944550
fuente
0
var scrolltobottom = document.documentElement.scrollHeight - $(this).outerHeight() - $(this).scrollTop();
gzenakos
fuente
2
Evite la respuesta de solo código y proporcione alguna explicación.
Mickael B.
-3

Este es un truco rápido: simplemente asigne el valor de desplazamiento a un número muy grande. Esto asegurará que la página se desplace hasta la parte inferior. Usando javascript simple:

document.body.scrollTop = 100000;
desenchufado
fuente
Esto no funcionará en páginas de más de 100000 píxeles. Eso puede parecer un caso bastante marginal, sin embargo, en casos como páginas de desplazamiento sin fin, no es tan improbable. Si realmente desea una solución sin jquery, esta respuesta podría ser una mejor opción.
lucash
ya, el punto es usar un número lo más grande posible, digamos 99999999999999999999999999999.
desenchufado