2012-05-08 6 views
0

に/クリックされたとき、私は新しいメッセージがロードされると、それはDIV(#chatlist)の一番下にスクロールだけで楽しい防止scrollTopスプライト(下)スクロールバーを使用

のために、少しチャットを作ってるんだものすべてのメッセージを保持します。しかし、divのスクロールバーを使用するとスクロールダウンしようとします(オーバーフロー:auto)。 どうすればこの問題を回避できますか?

私はここに私のコードは、これまで運がなくて、

を様々なノークリックの検出方法を試してみました。間隔は、すべてのいくつかの秒、それを発射:

var chatlist = $('#chatlist'); 

function chatinterval() { 
    $.ajax({ 
     type: "POST", 
     url: '/chatinterval.php', 
     data: "dbtime=" + latestchat, 
     dataType: "json", 
     success: function (data) { 
      if (data) { 
       chatlist.append(data.dbtext); 
       latestchat = data.dblatest; 
       // this part makes it scroll down 
       chatlist.scrollTop(chatlist[0].scrollHeight - chatlist.height()); 
      } 
     } 
    }); 
} 
+0

テキストエリアとは何ですか? – VisioN

+0

おっと、申し訳ありませんが、実際はoverflow:autoのdivです。 "textarea"は#chatlist – mowgli

答えて

1

あなたはフラグ変数(例えばclicked)を制御するためにmousedownscrollイベントを使用することができます。スクロールバーをクリック解除するとmouseupが起動しないので、ユーザが手動でスクロールを停止するまで待機するように、すべてのscrollイベントでタイムアウト(この例では5秒)を設定できます。だから、最終的なコードは次のようになります。

var chatlist = $('#chatlist'); 

var timer = null; 
var clicked = false; 

chatlist.on({ 
    mousedown: function() { 
     clicked = true; 
    }, 
    scroll: function() { 
     clearTimeout(timer); 
     timer = setTimeout(function() { 
      clicked = false; 
     }, 5000); 
    } 
}); 

function chatinterval() { 
    $.ajax({ 
     type: "POST", 
     url: '/chatinterval.php', 
     data: "dbtime=" + latestchat, 
     dataType: "json", 
     success: function (data) { 
      if (data) { 
       chatlist.append(data.dbtext); 
       latestchat = data.dblatest; 
       // this part makes it scroll down 
       if (!clicked) { 
        chatlist.scrollTop(chatlist[0].scrollHeight - chatlist.height()); 
       } 
      } 
     } 
    }); 
} 

DEMO:http://jsfiddle.net/rkUt9/

+0

です。コードに小さな欠陥がありますが、デモを行ったのと同様に、ユーザーは自動スクロールに戻ることはできません。彼は手動でスクロールを永続的に入力します。私の答えを見て、私のアイデアのコードを実装できるかどうかを確認してください(適切な場合)。 – Peter

+0

私の例では5秒待たなければならず、自動スクロールが戻ってきます。 – VisioN

+0

私は謝罪しますが、私がそれを開いたときに5秒ルールがなかったと確信しています。少し後に追加したか、何かがうまく動かなかったと思います。これは良いスニペットですが、ありがとうございます。 – Peter

関連する問題