2009-06-12 13 views
5

divを定義した高さとoverflow:scroll;があります。内容が長すぎてスクロールバーが表示されません。jQuery:divがスクロールダウンされたことを確認する方法

ichyの部分です。その内部HTMLのいくつかは、常に不思議に見えます(正確には、tableFilterプラグインによって生成されたテーブルのフッタ)。私はこのフッタが必要でないときに消えるようにしたいと思います(実際には<div>の境界線の外に現れます)。私はそれを消すことを決心しましたが、z-index-1000に設定しました。しかし、<div>が完全にスクロールして表示されるようにしたい。

ユーザーが下にスクロールしたことを確認するにはどうすればよいですか?以下の回答からの助けを使用して


、私はscrollTop属性を使用しますがscrollTopinnerHeightとの違いは、スクロールバープラスいくつかの正体不明のデルタのサイズです。スクロールバーは、Windows上のほとんどのブラウザでは16ピクセル高いですが、私は<div>のコンテンツのボーダーが大きく表示されているように、Firefoxでは17、IEでは20のような違いがあります。

スクロールバーのサイズを計算するための方法(実際には2つの方法)はthereです。 、あなたのDIVのスクロールイベントで

element.scrollTop; 

行うことが一致する(または一致に近い)場合は、要素の高さに対してチェックするためにその情報を使用します。

答えて

11

divの高さをscrollTopの位置と要素の高さと比較する必要があります。

div要素は、単にこれを行うことにより、スクロールダウンされている場合は、知ることができる
$(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

+0

水平スクロールバーはありますか?それはスクロールバーの高さについて聞こえる。 –

+0

はい、スクロールバーの高さのようです。どのブラウザでもこのスクロールバーの高さを取得する方法を知るための別の質問を投稿します。 – glmxndr

1

ませjQueryのは、その情報を取得する必要はありませんあなたが望むものなら、なんでも。

+0

実際には要素の高さではなく、内側の高さとコンテナの高さの差です。そうじゃない? – glmxndr

+0

私はShaunと同じことを言っています。しかし、==を探すのではなく、 'elementHeight <= scrollPosition + 20'のように、水平スクロールバーを説明するために何か不便なことをします。他の質問(スクロールバーのサイズを見つける)で成功した場合は、私のせいではなく20を使用します。 –

3

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

それはあなただけscrollHeightを使用する必要があるのFirefox、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

上で動作します高さの代わりにdivのプロパティ。 Shaun Humphriesが以前書いた関数isScrollBottomは()トリックを行うだろう単に

$(this).scrollTop()

、私が思うに、この

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

のように置くことができます。

+0

さて、私はなぜダウン投票を知っているかもしれませんか? –

0

これはdiv要素に限定されるものではない。

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

MDN Element.scrollHeightから。そのページには素晴らしいデモもあります。

関連する問題