jquery: $ (finestra) .scrollTop () ma non $ (finestra) .scrollBottom ()


86

Voglio posizionare un elemento in fondo alla pagina ogni volta che l'utente scorre la pagina. È come "posizione fissa" ma non posso usare "posizione: fissata" poiché molti dei browser dei miei clienti non lo supportano.

Ho notato che jquery può ottenere la posizione superiore della visualizzazione corrente, ma come posso ottenere la parte inferiore della visualizzazione di scorrimento?

Quindi sto chiedendo come sapere: $ (window) .scrollBottom ()

Risposte:


148
var scrollBottom = $(window).scrollTop() + $(window).height();

17
penseresti se fosse così semplice, che potrebbe essere incluso nel framework di base come .scrollBottom (). Strano ..
Curt

38
lo scorrimento Topè il numero di pixel verticali dal documento Topalla finestra visibile Top. Esattamente l'opposto dello scorrimento Top, lo scorrimento Bottomdovrebbe misurare il numero di pixel verticali dal documento Bottomalla finestra visibile Bottom(cioè la risposta di Alfred sotto). Ciò che questo dà è il # di pixel verticali dal documento _top_alla finestra visibile Bottom. È sicuramente utile, anche se non posso chiamarlo il contrario di ScrollBottom (so che questa è una risposta marcata ma per i lettori futuri come me)
DeepSpace101

1
Questa soluzione non funzionerà se la distanza dall'alto può variare. Ad esempio, se ho un <div> che deve essere ad una certa distanza dal fondo della pagina e la pagina ha elementi espandibili / comprimibili, cambierà l'altezza del corpo e quindi la distanza dal fondo.
crash Springfield

@crashspringfield In realtà questa è una domanda diversa. Questa domanda riguarda il posizionamento di oggetti vicino alla parte inferiore della visualizzazione e non alla fine della pagina.
iPherian

88

Direi che uno scrollBottom come opposto diretto di scrollTop dovrebbe essere:

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

Ecco un piccolo brutto test che funziona per me:

// 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 //

2
Perfetto, questo è quello che stavo cercando ... Grazie!
ℛɑƒæĿᴿᴹᴿ

9

Per il futuro, ho trasformato scrollBottom in un plugin jquery, utilizzabile nello stesso modo in cui lo è scrollTop (cioè puoi impostare un numero e farà scorrere quella quantità dalla parte inferiore della pagina e restituirà il numero di pixel dal fondo della pagina oppure, restituisce il numero di pixel dalla parte inferiore della pagina se non viene fornito alcun numero)

$.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);

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

Penso che sia meglio ottenere lo scorrimento inferiore.


2

Questo scorrerà fino in cima:

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

Questo scorrerà fino in fondo:

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

.. cambia la finestra con l'ID contenitore o la classe desiderati, se necessario (tra virgolette).


Come animare fino alla fine di un div ad altezza fissa con in overflow-y: automodo che scorra effettivamente fino alla fine del testo (che si estende oltre l'altezza del div)?
user1063287

Aggiornamento alla mia domanda in caso aiuta chiunque altro: penso che la proprietà ad uso potrebbe essere scrollHeight- vedi: stackoverflow.com/q/7381817
user1063287

0

Ecco l'opzione migliore scorri verso il basso per la griglia della tabella, scorrerà fino all'ultima riga della griglia della tabella:

 $('.add-row-btn').click(function () {
     var tempheight = $('#PtsGrid > table').height();
     $('#PtsGrid').animate({
         scrollTop: tempheight
         //scrollTop: $(".scroll-bottom").offset().top
     }, 'slow');
 });

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


0
var scrolltobottom = document.documentElement.scrollHeight - $(this).outerHeight() - $(this).scrollTop();

2
Si prega di evitare solo il codice di risposta e fornire alcune spiegazioni.
Mickael B.

-3

Questo è un trucco rapido: assegna semplicemente il valore di scorrimento a un numero molto grande. Ciò assicurerà che la pagina scorra fino in fondo. Utilizzando semplice javascript:

document.body.scrollTop = 100000;

Questo non funzionerà su pagine più lunghe di 100000 pixel. Potrebbe sembrare un caso piuttosto marginale, tuttavia in casi come pagine a scorrimento infinito non è così improbabile. Se vuoi davvero una soluzione senza jquery, questa risposta potrebbe essere un'opzione migliore.
lucash

ya, il punto è usare un numero il più grande possibile, ad esempio 99999999999999999999999999999999.
scollegato il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.