私は非常にシンプルなjQueryベースのチャットルーム(入門ワークショップで使用される)に取り組んでいます。 現在のチャットは、400pxの高さとオーバーフロー自動に設定されたdivに表示されます。jQuery .loadコールバック/スクロール/ CSSオーバーフロー
jQueryの「load」関数は、HTML形式のチャットをデータベースから取り出してdivに配置するために使用されます。
チャットdivが常に下にスクロールされることを保証する、非常に単純なコードがあります。このコードは、load関数で完了コールバック機能を使用して呼び出されるscrollToBottomという名前の関数にあります。
loadステートメントは、ページの準備ができたら1秒に1回呼び出されるgetChatという関数にあります。
$(function()
{
getChat();
setInterval("getChat();", 1000);
});
function getChat()
{
$("#chatDiv").load("chat_server.php?get_chats=true", scrollToBottom());
}
function scrollToBottom()
{
var chatHeight = document.getElementById("chatDiv").scrollHeight;
$("#chatDiv").scrollTop(chatHeight);
}
問題:ここでは、コードの関連塊だ と呼ばれるgetChat初めて、divが一番下までスクロールしません。その後の呼び出し(setInterval経由)では、スクロールがうまく動作します。ここで
私は/がこれまで行っている知っていることだ:私はscrollHeightを警告するとき、それは「400」は初めてと「441」以降の回だった、しかし、コールバックが最初に呼び出されている(つまり、 divのサイズより大きなコンテンツがある場合はどうなるべきか)。
441のハイコンテンツのscrollTop値が400の場合は、スクロールバーを下にスクロールする必要がありますが、scrollToBottomに400のハード値を設定しても問題は解決しません。 これは、問題がロードコールバックではなくCSS /スクロールに関連していると考えています。
チャットdivは空になりますが、nbspまたは1文字のを含むように変更すると、は問題を解決しませんでした。スクロールが必要なハードコーディングされたコンテンツでdivを開始させるDIDは問題を解決します。
この段階では、scrollTopが動作するためにはスクロールバーを表示/アクティブにする必要があるようですが、コールバックが発生する理由は初めてではありません
... ...コンテンツがロードされている(したがって、スクロールバーがアクティブ/見えるはず) AFTERちょうどそれが他人のコールバック関数が匿名インラインものであれば、まだ、それが正常に動作させるに
$(function()
{
getChat();
setInterval("getChat();", 1000);
});
function getChat()
{
$("#chatDiv").load("chat_server.php?get_chats=true",
function()
{
var chatHeight = document.getElementById("chatDiv").scrollHeight;
$("#chatDiv").scrollTop(chatHeight);
}
);
}
このバージョンは、最初とその後のすべての時間で正常に動作します...
このような状況で誰かがどんな光を放つことができますか? ありがとう、 Greg
- :
同様にを、あなたがたsetIntervalコールを簡素化することができ文法はちょっと醜いので、私はそれを避けたいと思いますし、私はできるだけクリーンで簡単にワークショップを続けたいと思います。私が別のエレガントなソリューションを見つけることができない場合、私はそれを使用します。 – Greg
.load()パスの最初の例のように、scrollToBottom()がパラメータとして渡されます。 2番目のコードサンプルは、load()が成功してトリガーされた場合のハンドルです。 – Tyde