Retinaを搭載したiPadでHTML5を使用して無限リストを開発しています。アイデアは、2 つのページをレンダリングしてから最初のページを削除し、次のページをリストの一番下に追加することです。デスクトップ Safari と Chrome では問題なく動作しますが、iPad では動作しません。
この例には 2 つのページがあります。すべてのメッセージの高さは同じ 120 ピクセルですが、最初のメッセージの高さは 300 ピクセルです。問題を再現するには、一番下までスクロールして LoadMore ボタンを押すと、ジャンプして正しい位置に移動します。スクロールと削除の間にわずかな遅延があるようです。これで、すべてのメッセージが同じ 120px の高さになり、一番下でスクロールしてボタンをもう一度クリックしても、ジャンプはなく、期待どおりに動作します。再起動ボタンを押すと再起動します。
レイアウト:
<div class="container"><div class="innerContainer">
<div class="page">
<div class="message" style="height:300px">...</div>
<div class="message">...</div>
<div class="message">...</div>
<div class="message">...</div>
<div class="message">...</div>
</div>
<div class="page">
...
</div>
</div>
</div>
DIV の代わりに UL と LI を使用しても、動作はまったく同じであることに注意してください。
LoadMore ボタンのコード:
newScrollPosition = container.scrollTop()-firstPage.outerHeight();
container.scrollTop(newScrollPosition);
innerContainer.append(newPage);
firstPage.remove();
すべてのメッセージが同じ高さの場合は問題なく動作しますが、メッセージの高さが異なる場合、ジャンプが見苦しくなります。
問題はリストの一番下でのみ発生することに注意してください。
firstPage を削除する次の方法を試しましたが、結果は常に同じです。
- 表示:なし
- jquery 削除
- elem.parentNode.removeChild( elem )
- 画面の左上と外側の絶対位置