jQuery Faire défiler vers le bas de la page / iframe

224

Comment utiliser jquery pour faire défiler vers le bas jusqu'au bas d'une iframe ou d'une page?

Adam
la source

Réponses:

360

Si vous voulez un joli défilement d'animation lent, pour toute ancre avec href="#bottom"cela vous fera défiler vers le bas:

$("a[href='#bottom']").click(function() {
  $("html, body").animate({ scrollTop: $(document).height() }, "slow");
  return false;
});

N'hésitez pas à changer le sélecteur.

Mark Ursino
la source
48
Cela fonctionne dans Firefox 3.5.7 mais pas dans Chrome 4.0.295.0. Les éléments suivants fonctionnent dans Chrome: $ ('html, body'). Animate ({scrollTop: $ (document) .height ()}, 'slow');
Tom
1
@ Tom, je ne vois pas la différence entre votre solution et Mark's!
Muhammad Gelbana
4
@MuhammadGelbana vérifiez la date de modification. Il semble que Mark ait mis à jour sa réponse pour inclure le correctif de Tom.
Paul Parker
Il n'est en fait pas nécessaire d'obtenir la hauteur de l'élément: stackoverflow.com/a/44578849/1450294
Michael Scheper
210

scrollTop () renvoie le nombre de pixels masqués de la zone de défilement, ce qui donne:

$(document).height()

dépassera en fait le bas de la page. Pour que le défilement s'arrête réellement au bas de la page, la hauteur actuelle de la fenêtre du navigateur doit être soustraite. Cela permettra l'utilisation de l'assouplissement si nécessaire, il devient donc:

$('html, body').animate({ 
   scrollTop: $(document).height()-$(window).height()}, 
   1400, 
   "easeOutQuint"
);
Tom Bates
la source
29
Cela devrait être la réponse acceptée, Tom a absolument raison, la réponse acceptée ne fonctionne pas bien car le défilement s'arrêtera brusquement au lieu de traiter la fin de l'assouplissement.
Christian
33
Remarque: easeOutQuintnécessite un plugin, jQuery lui-même n'a que linearet swing.
newenglander
mec c'est du bon matos! Merci. même le faire avec le «swing» au lieu de «l'easyoutquint» montre des différences notables ».
Jesse Head
Je ne sais pas si c'est une mauvaise forme, mais j'ai modifié la réponse acceptée pour ajouter un pointeur vers le bas à cette réponse. Si c'est le cas, alors quelqu'un peut le rétablir.
xaxxon
Cette solution ne fonctionne que si la page est interprétée en mode conforme à une norme. Par exemple, si vous n'incluez pas le <!DOCTYPE html>sur Chrome, Chrome renverra exactement la même valeur pour la fenêtre et la hauteur du document, auquel cas $(document).height()-$(window).height()retournera toujours 0. Voir ici: stackoverflow.com/questions/12103208/…
VKK
35

Par exemple:

$('html, body').scrollTop($(document).height());
Tatu Ulmanen
la source
Je n'arrive pas à faire fonctionner ça. Ne fait rien du tout.
Adam
@adam Quelle version de jQuery utilisez-vous?
Sonny Boy
14

Après que ce fil n'a pas fonctionné pour moi pour mes besoins spécifiques (faire défiler un élément particulier, dans mon cas une zone de texte), j'ai découvert cela dans le grand au-delà, ce qui pourrait s'avérer utile à quelqu'un d'autre lisant cette discussion:

Alternative sur planetcloud

Puisque j'avais déjà une version en cache de mon objet jQuery (le myPaneldans le code ci-dessous est l'objet jQuery), le code que j'ai ajouté à mon gestionnaire d'événements était simplement le suivant:

myPanel.scrollTop(myPanel[0].scrollHeight - myPanel.height());

(merci Ben)

Greg Pettit
la source
1
A travaillé pour moi avec un div:var d = $('#mydiv'); d.scrollTop (d[0].scrollHeight - d.height ());
gregn3
Devez-vous réellement faire le calcul? stackoverflow.com/a/44578849/1450294
Michael Scheper
4

Une fonction simple qui saute (défile instantanément) au bas de la page entière. Il utilise le intégré .scrollTop(). Je n'ai pas essayé de l'adapter pour travailler avec des éléments de page individuels.

function jumpToPageBottom() {
    $('html, body').scrollTop( $(document).height() - $(window).height() );
}
Rory O'Kane
la source
2
Je ne sais pas pourquoi, mais cela n'a pas fonctionné pour moi sur Firefox 26.0, et ferait défiler vers le haut lorsque cette fonction a été exécutée. Ce problème a été résolu en disant$(document).scrollTop($(document).height());
Jack
2

Celui-ci a fonctionné pour moi:

var elem = $('#box');
if (elem[0].scrollHeight - elem.scrollTop() == elem.outerHeight()) {
  // We're at the bottom.
}
MountainRock
la source
Cela ne répond pas à la question
huyz
2

Si vous ne vous souciez pas de l'animation, vous n'avez pas besoin d'obtenir la hauteur de l'élément. Au moins dans tous les navigateurs que j'ai essayés, si vous donnez scrollTopun nombre supérieur au maximum, il ne fera que défiler vers le bas. Alors donnez-lui le plus grand nombre possible:

$(myScrollingElement).scrollTop(Number.MAX_SAFE_INTEGER);

Si vous voulez faire défiler la page, plutôt qu'un élément avec une barre de défilement, faites simplement myScrollingElementégal à 'body, html'.

Comme je dois le faire à plusieurs endroits, j'ai écrit une fonction jQuery rapide et sale pour la rendre plus pratique, comme ceci:

(function($) {
  $.fn.scrollToBottom = function() {
    return this.each(function (i, element) {
      $(element).scrollTop(Number.MAX_SAFE_INTEGER);
    });
  };
}(jQuery));

Je peux donc faire cela lorsque j'ajoute un truc de buncho:

$(myScrollingElement).append(lotsOfHtml).scrollToBottom();
Michael Scheper
la source
0

Les scripts mentionnés dans les réponses précédentes, comme:

$("body, html").animate({
    scrollTop: $(document).height()
}, 400)

ou

$(window).scrollTop($(document).height());

ne fonctionnera pas dans Chrome et sera instable dans Safari au cas où la html balise en CSS a un overflow: auto;jeu de propriétés. Il m'a fallu près d'une heure pour comprendre.

Ilia Rostovtsev
la source
0
$('.block').scrollTop($('.block')[0].scrollHeight);

J'utilise ce code pour faire défiler le chat lorsque de nouveaux messages arrivent.

Александр Лиссов
la source
Veuillez inclure des explications pour votre code, en particulier lorsque vous copiez à partir de votre propre base de code, en utilisant des classes CSS qui ne sont pas pertinentes pour d'autres personnes;)
Bruno Monteiro
Prenez n'importe quel bloc avec une barre de défilement;) ou le document entier.
Александр Лиссов