新しいアイテムを追加する場合は、トップにいるかどうかを確認し、そうであれば新しいアイテムを追加してください。
もしそうでなければ、アイテムコンテナの既存のトップ/ハイトを取得し、新しいアイテムを追加し、アイテムコンテナの高さをもう一度取得してスクロールトップを更新します。
ここでは、トップとボトムの両方に追加する方法(btw、下部はスクロール補正が不要)の簡単なサンプルを示します。
function addItem (totop) {
var msgdiv = document.getElementById('items');
var attop = scrollAtTop(msgdiv);
var prevtop = parseInt(msgdiv.scrollHeight - msgdiv.scrollTop);
if (totop) {
msgdiv.innerHTML = 'Long long content ' + (tempCounter++) + '!<br/>' + msgdiv.innerHTML;
if (!attop) {
updateScroll(msgdiv, parseInt(msgdiv.scrollHeight) - prevtop);
}
} else {
msgdiv.innerHTML += 'Long long content ' + (tempCounter++) + '!<br/>';
}
}
var tempCounter = 10;
function updateScroll(el, top){
el.scrollTop = top;
}
function scrollAtTop(el){
return (el.scrollTop == 0);
}
html, body { height:100%; margin:0; padding:0; }
.items{
display: inline-block;
width: 300px;
height: 220px;
border: 1px solid black;
overflow: auto;
}
button { width: 15%; height: 44px; margin: 20px; vertical-align: top; }
<div class="items" id="items">
Long long content 9!<br/>
Long long content 8!<br/>
Long long content 7!<br/>
Long long content 6!<br/>
Long long content 5!<br/>
Long long content 4!<br/>
Long long content 3!<br/>
Long long content 2!<br/>
Long long content 1!<br/>
</div>
<button onclick="addItem(true);">Add 2 top</button><button onclick="addItem(false);">Add 2 bottom</button>
私はあなたがそれらを表示にスクロールするまで、コメントを更新しないことをお勧めしたいと思います:そのようにユーザーは実際に更新があったと見て、 そうでなければ、新しいものと古いものと、既に読んでいるものとを知るのはかなり難しいでしょう。これはあなたの質問に対する答えではありませんが、より良いユーザーエクスペリエンスにつながると思います。 – MrE