Revenir en haut de la div déroulante

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;

Comment réinitialiser la position de défilement vers le haut du conteneur div la prochaine fois?

je suis ici
la source

Réponses:

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

Voir l' scrollTopattribut.

Phrogz
la source
J'ai essayé mais cela n'a pas fonctionné. Quand un variableLongtext est chargé dans le conteneur div et que je regarde le milieu de celui-ci, puis glissez vers la nouvelle variableLongtext, il apparaîtra dans le conteneur, mais nous ne regarderons pas le haut de celui-ci, il sera déjà défilé un peu en bas.
je suis ici
2
@ s12345 Vous feriez mieux de faire un cas de test reproductible nous montrant votre problème (par exemple sur jsfiddle.net ) et de dire sur quel OS / navigateur / version vous rencontrez ce problème.
Phrogz
2
Désolé mon erreur .. ça marche! J'ai été confondu avec deux divs similaires.
je suis ici
63

Une autre façon de le faire avec une animation fluide est comme ça

$("#containerDiv").animate({ scrollTop: 0 }, "fast");
Mahmoud Ibrahim
la source
7
Fonctionne bien, mais s'il vous plaît ne pas utiliser slow, il est si ... lent!
Pascal
1
Au lieu de passer slowcomme deuxième argument. Vous pouvez passer un entier qui correspond au nombre de millisecondes pour que l'animation se termine.
Sushant Gupta
2
Je l'ai changé en jeûne :)
Mahmoud Ibrahim
1
Meilleure réponse! Merci!
YogaPanda
1
Cela fonctionne très bien si vous utilisez jquery. Si vous utilisez du typographie angulaire (javascript brut), cela ne fonctionnera pas. comment pouvez-vous y parvenir avec du javascript simple.
Babulaas
27

J'ai essayé les réponses existantes à cette question, et aucune d'elles n'a fonctionné sur Chrome pour moi. Ce qui fonctionnait était légèrement différent:

$('body, html, #containerDiv').scrollTop(0);
Productions Sunnyside
la source
16

scrollTo

window.scrollTo(0, 0);

est la solution ultime pour faire défiler les fenêtres vers le haut - la meilleure partie est qu'il ne nécessite aucun sélecteur d'identifiant et même si nous utilisons la structure IFRAME, cela fonctionnera extrêmement bien.

La méthode scrollTo () fait défiler le document jusqu'aux coordonnées spécifiées.
window.scrollTo (xpos, ypos);
xpos Numéro requis. Coordonnée vers laquelle faire défiler, le long de l'axe des x (horizontal), en pixels
ypos Nombre requis. La coordonnée vers laquelle faire défiler, le long de l'axe y (vertical), en pixels

jQuery

Une autre option pour faire la même chose est d'utiliser jQuery et cela donnera un aspect plus lisse pour le même

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

où 0 après scrollTop spécifie la position de la barre de défilement verticale dans le pixel et le second paramètre est un paramètre facultatif qui indique le temps en microsecondes pour terminer la tâche.

Gaurav Tiwari
la source
1
et si nous voulons seulement faire défiler un div interne vers le haut? Cela ne fonctionnera finalement pas.
John Lord
1
Les éléments ont également la méthode .scrollTo, vous pouvez le fairedocument.getElementById('scroller').scrollTo(0,0)
Mojimi
15

Cela a fonctionné pour moi:

document.getElementById('yourDivID').scrollIntoView();
Rajat
la source
C'est ma solution préférée. Pour une transition en douceur, ajoutez ceci:document.getElementById("yourDivID").scrollIntoView({behavior: "smooth", block: "start", inline: "nearest"})
Chris
Notez également que cela scollIntoViewne fonctionne que si vous l'appelez sur l'élément à faire défiler. En d' autres termes, ne pas l' appeler sur l'élément que vous voulez faire défiler à , appeler sur l'élément que vous voulez faire défiler.
Chris
9

Pour ceux qui ne peuvent toujours pas faire fonctionner cela, assurez-vous que l'élément débordé est affiché avant d'utiliser la fonction jQuery .

Exemple:

$('#elem').show();
$('#elem').scrollTop(0);
François Noël
la source
1
Sauveur de vie! Commençait à perdre l'envie de vivre avec scrollTop ne fonctionnant pas! dû mettre mon appel scrollTop dans une fonction setTimeout.
AVFC_Bubble88
Je ressens la même chose! Je travaillais dans une boîte de dialogue modale bootstrap. J'ai dû configurer un événement pour le modal qui n'a pas réinitialisé la barre de défilement jusqu'à ce que le modal ait cessé de s'animer. Voici le code que j'ai utilisé: $ ('# add_modal'). On ('shown.bs.modal', function (e) {$ ('div.border'). ScrollTop (0);});
Irv Lennert
2

Pour moi, la méthode scrollTop ne fonctionnait pas, mais j'en ai trouvé d'autres:

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

N'a pas vérifié le temps minimum pour un rendu css fiable, 100 ms pourraient être excessifs.

AlexTR
la source
2

Si vous souhaitez faire défiler avec une transition en douceur, vous pouvez l'utiliser!

(Vanille JS)

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

Si vos utilisateurs cibles sont Chrome et Firefox , c'est bien! Mais malheureusement, cette méthode n'est pas suffisamment prise en charge sur tous les navigateurs. Vérifiez ici

J'espère que cela t'aides!!

Ashwin
la source
2

Selon la réponse de François Noël "Pour ceux qui ne peuvent toujours pas faire ce travail, assurez-vous que l'élément débordé est affiché avant d'utiliser la fonction jQuery."

J'avais travaillé dans un modal bootstrap que j'évoquais à plusieurs reprises avec des autorisations de compte dans un div qui déborde sur la dimension y. Mon problème était que j'essayais d'utiliser la fonction jquery .scrollTop (0) et cela ne fonctionnerait pas, peu importe comment j'essayais de le faire. J'ai dû configurer un événement pour le modal qui n'a pas réinitialisé la barre de défilement jusqu'à ce que le modal ait cessé de s'animer. Le code qui a finalement fonctionné pour moi est ici:

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

Si le contenu html déborde d'une seule fenêtre, cela a fonctionné pour moi en utilisant uniquement javascript:

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

Cordialement,

Ruben
la source
1

C'est la seule façon dont cela a fonctionné pour moi, avec une transition de défilement fluide:

  $('html, body').animate({
    scrollTop: $('#containerDiv').offset().top,
  }, 250);
Fred K
la source
1

Lors de l'obtention d'un élément par nom de classe, n'oubliez pas que la valeur de retour est un tableau; D'où ce code:

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

Ça ne marcherait pas. Utilisez plutôt le code ci-dessous.

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

J'ai pensé que d'autres personnes pourraient rencontrer un problème similaire à moi; donc cela devrait faire l'affaire.

Mahsan Nourani
la source
0

ces deux codes ont fonctionné pour moi comme un charme, il faudra d'abord faire défiler vers le haut de la page, mais si vous voulez faire défiler jusqu'à un div spécifique, utilisez le second avec votre identifiant div.

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

Si vous voulez faire défiler jusqu'à par un nom de classe, utilisez le code ci-dessous

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

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

L'ID doit avoir l'id du div correspondant qui a la propriété css de débordement.

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

csandreas1
la source