2009-06-12 24 views
5

我有一个具有已定义高度的div,并且overflow:scroll;。它的内容太长,所以出现滚动条。jQuery:如何确定一个div向下滚动

现在为ichy部分。它的一些内部HTML总是奇怪地出现(准确地说,是由tableFilter插件生成的表的页脚)。我不想让这个页脚在不需要的时候消失(它实际上出现在包含<div>的边框之外)。我决定让它消失,但将它的z-index设置为-1000。但是我想让它在包含<div>完全滚动时出现。

我怎么知道用户已经滚动到底部?


使用从答案的帮助下,我用scrollTop属性,但scrollTopinnerHeight之间的区别是滚动条加上一些不明身份的三角洲的大小。在Windows下的大多数浏览器中,滚动条的高度是16像素,但我在Firefox中获得了17的差异,在IE中获得了20的差异,其中我的<div>内容的边框似乎变得更大。

计算滚动条大小的方法(实际上有两种方法)已被给出there

回答

11

您需要比较div高度与scrollTop位置和元素高度。

$(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); 
} 
+0

当我完全向下滚动时,我得到了elementHeight和scrollPosition之间的17像素差异。认为它是滚动条高度+一些边界? – glmxndr 2009-06-12 14:19:21

1

没有jQuery的需要来获取信息:

element.scrollTop; 

在你的DIV的滚动事件,使用该信息所要检查的元素的高度,如果匹配(或接近匹配)做任何你想要的。

+0

实际上它不是元素的高度,而是内部高度和容器高度之间的差异。不是吗? – glmxndr 2009-06-12 14:14:07

+0

我跟Shaun说的一样。但是,我不会去寻找==,而是会像`elementHeight <= scrollPosition + 20`这样粗糙的东西来解释水平滚动条。如果你发现你的其他问题取得成功(找到滚动条的大小),你会使用它,而不是我的马虎。20 – 2009-06-12 14:47:51

3

你可以知道,如果股利是通过简单地这样做向下滚动:

if (div.scrollTop + div.clientHeight == div.scrollHeight){ 
//... 
} 

它适用于火狐,Chrome和IE8

0
function elementInViewport(el) { 
    var listcontent= $(".listContainer")[0].getBoundingClientRect(); 
    var rect = $(el)[0].getBoundingClientRect(); 
    return [(rect.top >= 0 && rect.left >= 0 && rect.bottom <= listcontent.bottom), (rect.bottom - listcontent.bottom)] 
} 
0

你只需要使用scrollHeight属性div的属性而不是高度。该功能isScrollBottom(),它Shaun Humphries以前写的,可以把这样

function isScrollBottom() { 
var totalHeight = $("divSelector")[0].scrollHeight; 
var scrollPosition = $("divSelector").height() + $("divSelector").scrollTop(); 
return (totalHeight == scrollPosition); 
} 
-1

我想,干脆

$(this).scrollTop()

会做的伎俩。从MDN Element.scrollHeight

toallyScrolled = element.scrollHeight - element.scrollTop === element.clientHeight; 

0

这不限于的div。在该页面上还有一个很好的演示。

相关问题