メッセージのリストを含むdivがあります(チャットルームアプリケーション)。各メッセージがリストの一番下に追加されると、 思う divをページの一番下までスクロールするようにします。それは理にかなっていますよね?だから-質問#1:divを下にスクロールするにはどうすればいいですか?
さて、次の質問は使いやすさについてです。 ユーザーがスクロールして、以前に投稿されたものを読むとどうなりますか?その後、突然誰かが新しいメッセージを投稿しますか?つまり、jQueryは再び下にスクロールします。これは、ユーザーを非常に苛立たせる可能性があります。これを処理するための良い方法は何ですか?新しいメッセージが追加される前にスクロールバーが既に一番下までスクロールされている場合にのみ下にスクロールする必要がありますか?そうであれば、jQueryでそれを行う方法は?
回答:
回答№1は2スクロールバーの位置を取得するには window.pageYOffset
使用して window.scrollTo(0, y)
ある場所までスクロールします。
またはあなたも使用することができます $("#mydiv").scrollTop(newmsg_top)
jqueryで新しいメッセージまでスクロールダウンします。
どこで var newmsg_top = parseInt($("#mydiv li:last").offset().top);
ここに #mydiv
すべてのメッセージを含むdivです。
そう #mydiv li:last
最後のメッセージを指します。
offset()
ドキュメントに対する要素の現在の位置を返します。トップ位置を取得するには .top
代わりに親に対する相対的な位置が必要な場合は、 position()
編集: ここでjsfiddleを手に入れました ここに。見てください。</ strong> 注:最後の要素を表示している場合にのみダウンします(ユーザビリティの問題の解決のため)
回答№2の場合は1
//これは追加後、最後までスクロールします
$("#mydiv").append("My data");
var newmsg_top = parseInt($("#mydiv")[0].scrollHeight );
$("#mydiv").scrollTop(newmsg_top);