私は次のような単純なデータグリッドを持っています:
<div class="uiGridContent">
<table>
<tbody id="page-1">
<tr>
<td>Cell 1</td>
<td>Cell 2</td>
<td>Cell 3</td>
</tr>
</tbody>
</table>
</div>
* uiGridContent div の上と下の div の別々のテーブルにヘッダーとフッターがあることに注意してください。この例では必要ありません。
var nextPage = 1, lastScrollTop = 0, st;
$('.uiGridContent').scroll(function(){
var st = $(this).scrollTop();
// We're scrolling down
if (st > lastScrollTop){
if( $('.uiGridContent').scrollTop() + $('.uiGridContent').innerHeight() >= $('.uiGridContent')[0].scrollHeight && nextPage < 10) {
$.ajax({
url: '<?php echo $appurl; ?>?page=' + nextPage,
success: function(data) {
nextPage = nextPage + 1;
var content = $(data).find('.uiGrid tbody').html();
$('.uiGridContent tbody').last().after('<tbody id="page-'+nextPage+'">'+content+'</tbody>');
},
error: function(data) {
alert(data);
}
});
}
lastScrollTop = st;
// We're scrolling up
} else {
if( $('.uiGridContent').scrollTop() + $('.uiGridContent').innerHeight() >= $('.uiGridContent tbody').last().height() ) {
var pageToRemove = $('.uiGridContent tbody').last();
if( pageToRemove.attr('id') != 'page-1') {
pageToRemove.remove(); nextPage = nextPage - 1;
} else {
$('.uiGridContent').scrollTo(0,0);
}
}
lastScrollTop = st;
}
});
ユーザーがテーブルを下にスクロールすると、gridcontent div の最後の tbody の一番下に到達すると、次のページに読み込まれるという考えです。これはうまくいきます!
問題は、スクロールバックにあります。ユーザーが最後の tbody を超えて上にスクロールすると、残りの tbody (この場合はオリジナル) が 1 つだけになるまで再び削除されるようにする予定です。実際に何が起こるかというと、上にスクロールし始めるとすぐに、最初のものを除くすべてが削除されるか、時には上にスクロールできず、他のすべての tbody を削除せずにユーザーが一番上に移動します。
何か案は?問題はif文にあると思います:
if( $('.uiGridContent').scrollTop() + $('.uiGridContent').innerHeight() >= $('.uiGridContent tbody').last().height() ) {
スクロールアップセクションの下。