How do I use jquery to scroll right down to the bottom of an iframe or page?
9 Answers
scrollTop() returns the number of pixels that are hidden from view from the scrollable area, so giving it:
$(document).height()
will actually overshoot the bottom of the page. For the scroll to actually 'stop' at the bottom of the page, the current height of the browser window needs subtracting. This will allow the use of easing if required, so it becomes:
$('html, body').animate({
scrollTop: $(document).height()-$(window).height()},
1400,
"easeOutQuint"
);
After this thread didn't work out for me for my specific need (scrolling inside a particular element, in my case a textarea) I found this out in the great beyond, which could prove helpful to someone else reading this discussion:
Since I already had a cached version of my jQuery object (the myPanel
in the code below is the jQuery object), the code I added to my event handler was simply this:
myPanel.scrollTop(myPanel[0].scrollHeight - myPanel.height());
(thanks Ben)
A simple function that jumps (instantly scrolls) to the bottom of the whole page. It uses the built-in .scrollTop()
. I haven’t tried to adapt this to work with individual page elements.
function jumpToPageBottom() {
$('html, body').scrollTop( $(document).height() - $(window).height() );
}
If you don't care about animation, then you don't have to get the height of the element. At least in all the browsers I've tried, if you give scrollTop
a number that's bigger than the maximum, it'll just scroll to the bottom. So give it the biggest number possible:
$(myScrollingElement).scrollTop(Number.MAX_SAFE_INTEGER);
If you want to scroll the page, rather than some element with a scrollbar, just make myScrollingElement
equal to 'body, html'.
Since I need to do this in several places, I've written a quick and dirty jQuery function to make it more convenient, like this:
(function($) {
$.fn.scrollToBottom = function() {
return this.each(function (i, element) {
$(element).scrollTop(Number.MAX_SAFE_INTEGER);
});
};
}(jQuery));
So I can do this when I append a buncho' stuff:
$(myScrollingElement).append(lotsOfHtml).scrollToBottom();
The scripts mentioned in previous answers, like:
$("body, html").animate({
scrollTop: $(document).height()
}, 400)
or
$(window).scrollTop($(document).height());
will not work in Chrome and will be jumpy in Safari in case html
tag in CSS has overflow: auto;
property set. It took me nearly an hour to figure out.