Scorri fino alla fine di Div al caricamento della pagina (jQuery)


238

Ho un div sulla mia pagina:

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

Come posso far scorrere il div fino alla fine del div ?? Non la pagina, solo il DIV.

Risposte:


610

Le altre soluzioni qui in realtà non funzionano per i div con un sacco di contenuti: "si estendono al massimo" scorrendo verso il basso fino all'altezza del div (anziché all'altezza del contenuto del div). Quindi funzioneranno, a meno che tu non abbia più del doppio dell'altezza del div nel contenuto al suo interno.

Ecco la versione corretta:

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

o jQuery 1.6+ versione:

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

O animato:

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

5
Questo funziona anche: $ ('# div1'). ScrollTop ($ ('# div1'). Attr ("scrollHeight"));
Mike Todd,

2
Come farlo funzionare senza impostare un'altezza assoluta (in px) su div1?
znat,

Molto bene! Stavo cercando uno snippet da scorrere e tutto ciò che riuscivo a trovare lo scorrimento della pagina (HTML, corpo). Questa è un'ottima soluzione e l'utilizzo di scrollHeight è un ottimo modo per assicurarsi che raggiunga sempre il fondo.
Kevin Marmet,

fantastico, il secondo funziona così:d = $('#div1'); $(d).scrollTop( $(d).prop("scrollHeight") );
loretoparisi,

56

Tutte le risposte che posso vedere qui, inclusa quella attualmente "accettata", sono in realtà errate in quanto impostano:

scrollTop = scrollHeight

Considerando che l'approccio corretto è quello di impostare:

scrollTop = scrollHeight - clientHeight

In altre parole:

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

O animato:

$("#div1").animate({
  scrollTop: $('#div1')[0].scrollHeight - $('#div1')[0].clientHeight
}, 1000);

Ho un div con un'altezza impostata e l'overflow impostato su auto. Le risposte animate hanno funzionato, ma questa è l'unica soluzione non animata che potrebbe scorrere fino alla fine del "contenuto", non l'altezza impostata del div. Bravo!
Darkloki,

23

AGGIORNAMENTO: vedi la soluzione di Mike Todd per una risposta completa.


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

se vuoi che sia animato (oltre 1000 millisecondi).

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

se lo vuoi istantaneo.


8
Sbagliato! .height () è limitato all'area visualizzata, .prop ("scrollHeight") è l'altezza reale del div.
Puntatore Null

5
Assolutamente! Ecco perché la risposta di Mike Todd è quella accettata, non la mia.
Alexis Pigeon

15
$(window).load(function() {
  $("html, body").animate({ scrollTop: $(document).height() }, 1000);
});

Questo afferra l'altezza della pagina e la fa scorrere verso il basso una volta caricata la finestra. Cambia 1000in quello che ti serve per farlo più velocemente / più lentamente una volta che la pagina è pronta.


Questo scorre l'intera pagina giusto? Voglio solo che il div scorra fino alla fine del div.
DobotJr

2
touche. stessa logica, selettore diverso.
Accordi


5

Scorri la finestra fino alla fine del div target.

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

5

Di seguito funzionerà. Si prega di notare [0]escrollHeight

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

5

per animate in jquery (versione> 2.0)

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

4

Nessuno di questi ha funzionato per me, ho un sistema di messaggi all'interno di un'app Web simile a Facebook Messenger e volevo che i messaggi comparissero in fondo a un div.

Questo ha funzionato a meraviglia, Javascript di base.

window.onload=function () {
     var objDiv = document.getElementById("MyDivElement");
     objDiv.scrollTop = objDiv.scrollHeight;
}

1
Probabilmente non hai installato jQuery. Stai lavorando con dom nativo, stanno usando jQuery. jquery.com
csga5000,

Soluzione molto curata ed elegante.
Divyanshu Das,

2

Sto lavorando in una base di codice legacy cercando di migrare su Vue.

Nella mia situazione specifica (div scorrevole in un bootstrap modale), un v-if mostrava nuovi contenuti, a cui volevo che la pagina scorresse verso il basso. Per far funzionare questo comportamento, ho dovuto attendere che Vue finisse di eseguire nuovamente il rendering, quindi utilizzare jQuery per scorrere fino alla fine del modale.

Così...

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

0

È possibile utilizzare il codice seguente per scorrere fino alla fine del div al caricamento della pagina.

$(document).ready(function(){
  $('div').scrollTop($('div').scrollHeight);
});

0

Puoi controllare scrollHeight e clientHeight con scrollTop per scorrere fino alla fine del div come il codice qui sotto.

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


testare sempre il codice prima di fornire le soluzioni.
Lakshmi,

-2

Quando la pagina viene caricata, scorrere è il valore massimo.

Questa è una finestra di messaggio quando l'utente invia un messaggio, quindi mostra sempre l'ultima chat in basso in modo che il valore di scorrimento sia sempre massimo.

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

vedi immagine

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.