2011-07-27 23 views
1

私のコードはhereです。私がやろうとしている何スクロールバーの位置に基づいてdivのスクロール位置を維持する

setInterval(
    function (data){ 
     var alreadyScrolled = $("#smallBox").height() >= $("#smallBox").get()[0].scrollHeight; 


     $("#smallBox").append(data + "<br />"); 
     if (alreadyScrolled) { 
      $("#smallBox").scrollTop($("#smallBox").heightoffsetHeight) 
     } 
    }, 
    1000, 
    Date() 
); 


<div id="largeBox"> 
    <div id="smallBox"> 
    </div> 
    <input /> 
</div> 

は、スクロールバーがウィンドウの下部にあり、それがある場合は、一番下までスクロールバック、その後、div要素に新しいデータを追加するかどうかを検出、です。スクロールがまだ最下部にない場合は、何もしないでください。

私はこれを達成するために使用できるDOMやjquery APIのどちらの部分がわからないのですか?私は複数のことを試してきましたが、ややこしてここに詰まっています。スクロールバーは、どのくらいスクロールすることができます。もし私がそれを得ることができれば、パーセント値は素晴らしいだろう。

jQuery以外のライブラリを使用したくないということは、プラグインもないことを意味します。

私はSOのチャットルームで見られるのと同じ振る舞いをしたいと思っていますが、それはScrollToプラグインを使っていることを除いているようです。

私はちょうど.height()と.scrollTopを使うことはできませんが、それらは一致しません。

この参照: http://jsfiddle.net/qSx3M/6/

答えて

3

を試してみて、私は、これはあなたが後にしているものだと思いますか?

http://jsfiddle.net/qSx3M/7/

コード:

var alreadyScrolled = $("#smallBox")[0].scrollTop + $("#smallBox").height() == $("#smallBox")[0].scrollHeight; 
0

昔ながらのjavascriptのスクロール値:

var scrollVal = myDivElem.scrollTop; 
+0

右は、スクロールバーがピクセルで表示されている場所を示していますが、下に表示されている場合は表示されません。 – Incognito

+0

これは簡単なことです(scrollVal == document.getElementById(DivID).style.height) –

0

この

var $this; 
    $('#container').scroll(function(){ 
    $this = $(this); 
    if ($this.scrollTop() > $this.height()){ 
     //Do something here 
    } 
}); 
1

あなたのコードを取り、小さな修正を行いました。良いコードだと言うことはできませんが動作します

setInterval(
    function (data){ 
     var alreadyScrolled = $("#smallBox").height() + $("#smallBox").get()[0].scrollTop >= $("#smallBox").get()[0].scrollHeight; 

     console.log(alreadyScrolled); 

     $("#smallBox").append(data + "<br />"); 
     if (alreadyScrolled) { 
      $("#smallBox").get()[0].scrollTop = $("#smallBox").get()[0].scrollHeight; 
     } 
    }, 
    1000, 
    Date() 
); 
+0

ああ、これはトリックでした.... $( "#smallBox")。height()+ $( "#smallBox ").get()[0] .scrollTop' – Incognito