時々リロードされるページの要素に mCustomScrollbar を使用します。これはメッセージ ビューであり、ユーザーが別の会話をクリックすると、この会話のメッセージが読み込まれます。ただし、これをロードした後に下にスクロールしたい場合、最新のメッセージが下にあるため、下にスクロールするのではなく、下に数ピクセル上にスクロールします(「いくつか」は10〜200pxの間でランダムにできます)。
以下は簡単な例です。
// code to load another conversation
$(".conversations .conversation").click(function (e) {
var $this = $(this);
$.ajax({
url: W.sprintf('/messages/%s/fetch', $this.attr("data-cid")),
dataType: 'html'
}).done(function(data) {
$('.main_pane.messages').html(data);
// a function call to set the hight of .main_list.messages goes here
$(".main_list.messages").mCustomScrollbar(W.scroll_prefs);
$(".main_list.messages").mCustomScrollbar("scrollTo", "bottom");
// also tried adding an element at bottom and scrolling to this
// and scrollTo Number.MAX_VALUE
// also tried putting the two mCustomScrollbar lines both into
// setTimeout()
});
});
<!-- this is what gets loaded -->
#conversation
.head
-# some foo
.conv_body
.main_list.messages.custom-scroll.hide-scrollbar.start-bottom
-# basically a bunch of these below
.listelem.msg
.left
= image_tag(user.avatar.image(:icon), size: avatar_size(:icon))
.right
%span.datetime= fmt_time(msg[:datetime], :time)
.middle
.name= link_to(user.login, user)
.text= msg[:text]
#new_message_container.main_input.open.threeline
= form_for(@message) do |f|
-# ...
CSS: わずかな余白とパディングと色とその他のもので、派手なものは何もありません