Torna all'inizio del div scorrevole


122
<div id="containerDiv"></div>
#containerDiv {
  position: absolute;
  top: 0px;
  width: 400px;
  height: 100%;
  padding: 5px;
  font-size: .875em;
  overflow-y: scroll;
}
document.getElementById("containerDiv").innerHTML = variableLongText;

Come reimpostare la posizione di scorrimento all'inizio del div contenitore la prossima volta?

Risposte:


207
var myDiv = document.getElementById('containerDiv');
myDiv.innerHTML = variableLongText;
myDiv.scrollTop = 0;

Vedi l' scrollTopattributo.


Ho provato ma non ha funzionato. Quando un variableLongtext viene caricato nel div contenitore e sto guardando al centro di esso, quindi scorri fino alla nuova variableLongtext, verrà visualizzato nel contenitore, ma non guarderemo all'inizio di esso, sarà già fatto scorrere un po 'giù.
qui

2
@ s12345 Faresti meglio a creare un test case riproducibile che ci mostri il tuo problema (ad esempio su jsfiddle.net ) e dire su quale sistema operativo / browser / versione stai riscontrando questo problema.
Phrogz

2
Scusa il mio errore .. funziona! Mi sono confuso con due div simili.
qui

63

Un altro modo per farlo con un'animazione fluida è questo

$("#containerDiv").animate({ scrollTop: 0 }, "fast");

7
Funziona bene, ma per favore non usare slow, è così ... lento!
Pascal

1
Invece di passare slowcome secondo argomento. Puoi passare un numero intero che sarebbe il numero di millisecondi per il completamento dell'animazione.
Sushant Gupta

2
Cambiato in veloce :)
Mahmoud Ibrahim

1
Migliore risposta! Grazie!
YogaPanda

1
Funziona bene se stai usando jquery. Se stai usando un dattiloscritto angolare (semplice javascript) questo non funzionerà. come puoi ottenere questo risultato con un semplice javascript.
Babulaas

27

Ho provato le risposte esistenti a questa domanda e nessuna di esse ha funzionato su Chrome per me. Quello che ha funzionato era leggermente diverso:

$('body, html, #containerDiv').scrollTop(0);

16

scrollTo

window.scrollTo(0, 0);

è la soluzione definitiva per scorrere le finestre verso l'alto - la parte migliore è che non richiede alcun selettore di id e anche se usiamo la struttura IFRAME funzionerà molto bene.

Il metodo scrollTo () scorre il documento fino alle coordinate specificate.
window.scrollTo (xpos, ypos);
Numero xpos obbligatorio. La coordinata su cui scorrere, lungo l'asse x (orizzontale), in pixel
Numero ypos Richiesto. La coordinata su cui scorrere, lungo l'asse y (verticale), in pixel

jQuery

Un'altra opzione per fare lo stesso è usare jQuery e darà un aspetto più liscio per lo stesso

$('html,body').animate({scrollTop: 0}, 100);

dove 0 dopo scrollTop specifica la posizione della barra di scorrimento verticale nel pixel e il secondo parametro è un parametro opzionale che mostra il tempo in microsecondi per completare l'operazione.


1
cosa succede se vogliamo solo scorrere un div interno verso l'alto? Questo alla fine non funzionerà.
John Lord,

1
Gli elementi hanno anche il metodo .scrollTo, che puoi faredocument.getElementById('scroller').scrollTo(0,0)
Mojimi

15

Questo ha funzionato per me:

document.getElementById('yourDivID').scrollIntoView();

Questa è la mia soluzione preferita. Per una transizione fluida, aggiungi questo:document.getElementById("yourDivID").scrollIntoView({behavior: "smooth", block: "start", inline: "nearest"})
Chris

Inoltre, nota che scollIntoViewfunziona solo se lo chiami sull'elemento che deve essere fatto scorrere. In altre parole, non chiamatela sull'elemento si desidera scorrere a , chiamare sull'elemento si desidera scorrere.
Chris

9

Per coloro che ancora non riescono a farlo funzionare, assicurarsi che l'elemento in overflow sia visualizzato prima di utilizzare la funzione jQuery .

Esempio:

$('#elem').show();
$('#elem').scrollTop(0);

1
Salvavita! Cominciava a perdere la voglia di convivere con scrollTop che non funzionava! ho dovuto mettere la mia chiamata scrollTop in una funzione setTimeout.
AVFC_Bubble88

Mi sento lo stesso! Stavo lavorando in una finestra di dialogo modale bootstrap. Ho dovuto impostare un evento per il modale che non ripristinava la barra di scorrimento fino a quando il modale non aveva smesso di animarsi. Questo è il codice che ho usato: $ ('# add_modal'). On ('shown.bs.modal', function (e) {$ ('div.border'). ScrollTop (0);});
Irv Lennert

2

Per me il modo scrollTop non ha funzionato, ma ne ho trovati altri:

element.style.display = 'none';
setTimeout(function() { element.style.display = 'block' }, 100);

Non è stato verificato il tempo minimo per un rendering CSS affidabile, 100 ms potrebbero essere eccessivi.


2

Se vuoi scorrere con una transizione graduale, puoi usare questo!

(Vaniglia JS)

const tabScroll = document.getElementById("tabScroll");
window.scrollTo({
  'behavior': 'smooth',
  'left': 0,
  'top': tabScroll.offsetTop - 80
});

Se i tuoi utenti target sono Chrome e Firefox , allora va bene! Ma sfortunatamente questo metodo non è supportato abbastanza bene su tutti i browser. Controlla qui

Spero che questo ti aiuti!!


2

Come da risposta di François Noël "Per coloro che ancora non riescono a farlo funzionare, assicurarsi che l'elemento in overflow sia visualizzato prima di utilizzare la funzione jQuery."

Stavo lavorando in un modal bootstrap che ho ripetutamente visualizzato con le autorizzazioni dell'account in un div che trabocca sulla dimensione y. Il mio problema era che stavo cercando di utilizzare la funzione jquery .scrollTop (0) e non avrebbe funzionato indipendentemente da come avessi provato a farlo. Ho dovuto impostare un evento per il modale che non ripristinava la barra di scorrimento fino a quando il modale non aveva smesso di animarsi. Il codice che alla fine ha funzionato per me è qui:

    $('#add-modal').on('shown.bs.modal', function (e) {
        $('div.border').scrollTop(0);
    });

1

Se il contenuto html trabocca di una singola visualizzazione, questo ha funzionato per me utilizzando solo javascript:

document.getElementsByTagName('body')[0].scrollTop = 0;

Saluti,


1

Questo è l'unico modo in cui ha funzionato per me, con una transizione di scorrimento fluida:

  $('html, body').animate({
    scrollTop: $('#containerDiv').offset().top,
  }, 250);

1

Quando si ottiene un elemento in base al nome della classe, non dimenticare che il valore restituito è un array; Da qui questo codice:

document.getElementByClassName("dropdown-menu").scrollTop = 0

Non funzionerebbe. Usa invece il codice qui sotto.

document.getElementByClassName("dropdown-menu")[0].scrollTop = 0

Ho pensato che altre persone avrebbero potuto incontrare un problema simile a me; quindi questo dovrebbe fare il trucco.


0

questi due codici hanno funzionato per me come un fascino che questo primo richiederà per scorrere fino all'inizio della pagina, ma se vuoi scorrere fino a qualche div specifico usa il secondo con il tuo div id.

$('body, html, #containerDiv').scrollTop(0);
document.getElementById('yourDivID').scrollIntoView();

Se desideri scorrere fino al nome di una classe, utilizza il codice seguente

var $container = $("html,body");
var $scrollTo = $('.main-content');

$container.animate({scrollTop: $scrollTo.offset().top - $container.offset().top + $container.scrollTop(), scrollLeft: 0},300);

0

L'ID dovrebbe avere l'ID del div corrispondente che ha la proprietà CSS di overflow.

document.querySelector('#YOUR_OVERFLOWED_DIV').scrollTop = 0;

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.