2017-02-28 9 views
1

スクロールリストがあると仮定して、新しいDOMを現在のDOMに追加するとうまくいきます。 プルアップ
現在のDOMの前にdomを追加し、現在のDOMをビューポートに残しておきます

enter image description here

しかし、私は前にいくつかの新しいDOMを挿入した場合、新しいDOMは、ビューポートになり、古いDOMが押し下げされます。 プルダウン

enter image description here

私はプルダウンをプルアップのように振る舞うことができます方法はありますか?後に手動でscrollTopを設定しないで?

+0

は、あなたが「(いくつかの代表的なコードを表示することができます* [MCVE] *:私は

function scrollSafeInsertBefore(fragment, el, scrollContainer) { var scroller = scrollContainer || document.body; var parent = el.parentElement; var aboveScroll = el.getBoundingClientRect().top < 0; if (aboveScroll) { var st = parent.scrollHeight; parent.insertBefore(fragment, el); var dy = parent.scrollHeight - st; scroller.scrollTop += dy; // Move back the height change } else { parent.insertBefore(fragment, el); // Normal injection } } 

フィドル...しかし、このようなアプローチで多くの問題が表示されません")? '古いDOM'に 'id'がある場合は、 '新しいDOM'の内容を簡単に前に置くことができ、現在のページのハッシュを'#oldDOMId'に更新することができます。目に見える動きがあります。 –

答えて

0

Google Chromeでは、あなたが記述した動作を再現することができません。ブラウザがDOM編集時にスクロール位置を管理する方法に違いがありますか?

Safariでは、あなたが説明した動作が表示されます。私はこの問題を回避するために、任意の異なる注入方法を認識していないよ、と私はそのようなtranslateYposition: absoluteとしてのCSSのようなトリックが進むべき道とは思わない...

だから、それは一つに私たちをもたらしますあなたが使用したくないと言ったオプション... Modifying scrollTophttps://jsfiddle.net/pq4t2zbn/(プレス挿入ボタン)

関連する問題