views:

1666

answers:

2

I have a div with defined height, and overflow:scroll;. Its content is too long so scrollbars appear.

Now for the ichy part. Some of its inner HTML strangely appears all the time (to be precise, the footer of a table generated by the tableFilter plugin). I'd like to make this footer disappear when it is not needed (it actually appears out of the containing <div>'s border). I resolved to make it disappear but setting its z-index to -1000. But I want to make it appear when the containing <div> is totally scrolled down.

How can I know the user has scrolled at the bottom ?


Using the help from answers below, I used scrollTop attribute but the difference between scrollTop and innerHeight is the size of the scrollbar plus some unidentified delta. A scrollbar is 16 pixels high in most browsers under Windows, but I get a difference of 17 in Firefox and something like 20 in IE, where my <div> content's borders seems to be rendered bigger.

A way (actually two ways...) to compute the scrollbar size has been given there.

+1  A: 

No jQuery needed to get that info:

element.scrollTop;

In a scroll event of your DIV, use that info to check against the height of the element, if it matches (or is close to matching) do whatever you want.

rpflo
Actually it's not the height of the element but the difference between inner's height and container's height. Is it not ?
subtenante
I'm saying the same thing as Shaun. But instead of looking for == I would do something sloppy like `elementHeight <= scrollPosition + 20` to account for the horizontal scroll bar. If you find success with your other question (finding the size of the scroll bar) you would use that instead of my sloppy 20.
rpflo
+3  A: 

You need to compare the div height with the scrollTop position and the element height.

$(div).scroll(function(){ 
  if(isScrollBottom()){ 
    //scroll is at the bottom 
    //do something... 
  } 
}); 

function isScrollBottom() { 
  var elementHeight = $(element).height(); 
  var scrollPosition = $(div).height() + $(div).scrollTop(); 
  return (elementHeight == scrollPosition); 
}
Shaun Humphries
I'm getting a 17 pixel difference between elementHeight and scrollPosition when completely scrolled down. Think it's scrollbar height + some borders ?
subtenante
Is there a horizontal scrollbar? That sounds about the height of the scrollbar.
Shaun Humphries
Yes it seems to be the scrollbar height. I'll post another question to know how to get this scrollbar height on any browser.
subtenante
Safari: 16px, IE7: 20px ... Personally I just account for 20 extra, or you could check browsers and then give it the right number.
rpflo
Not so simple, depends on the theme used on the OS.
subtenante