根据滚动方向和高度加载和删除内容页面
Load and remove pages of content based on scroll direction and height
我有这样的简单数据网格:
<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>
* 请注意,我在 uiGridContentdiv 上方和下方的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;
}
});
这个想法是,当用户向下滚动表格时,当他们到达网格内容div中最后一个正文的底部时,它将在下一页加载。
问题在于向上滚动备份。计划是使用户向上滚动到最后一个正文时,它会再次删除它,直到他们最终只剩下一个正文(在本例中为原始主体)。实际发生的是,一旦他们开始向上滚动,它就会删除除第一个之外的所有内容,或者有时会错过向上滚动并将用户带到顶部而不删除所有其他 tbody。
有什么想法吗?我认为问题出在 if 语句上:
if( $('.uiGridContent').scrollTop() + $('.uiGridContent').innerHeight() >= $('.uiGridContent tbody').last().height() ) {
在向上滚动部分下。
是的,你是对的,问题是 if
语句中使用的条件:
if ( $('.uiGridContent').scrollTop() + $('.uiGridContent').innerHeight() >= $('.uiGridContent tbody').last().height() )
这是在询问 .uiGridContent
的 scrollTop 加上它的.innerHeight()
是否大于最后一个tbody
元素的高度。这类似于询问可滚动窗格的底部是否低于最后一个tbody
元素的高度(如果它位于.uiGridContent
的顶部)。那不是你想要的。
您想要的是询问可滚动窗格的底部是否在最后一个tbody
元素的顶部之上。由于您只关心最后一个,因此您可以使用:
if ( $('.uiGridContent').scrollTop() + $('.uiGridContent').innerHeight() <= ($this[0].scrollHeight - $('.uiGridContent tbody').last().height()) )
尽管您确实想像我在此演示中所做的那样缓存这些重复的$( ... )
调用:
http://jsfiddle.net/anmkU/3/
而且您可能希望在使用它时缓存scrollBottom
(内容底部和可视区域底部之间的距离)的想法,这可能有助于提高可读性:
http://jsfiddle.net/anmkU/5/
- 使用php或javascript从facebook相册URL中删除多余的部分
- electronic BrowserWindow的最小高度和宽度在hide()show()方法之后不起作用
- RegEx删除空属性?例如,如果(class=“”||class=“”)移除;否则就下课
- ExtJS——在展开/折叠时调整面板高度
- 分析高度属性时出现意外值{{specs.height}}.index.html
- 如何删除多行HTML排列中的空白
- 如何从rails中的代码中删除新行( )
- 单击页面上的链接后高度发生变化
- 删除对HTML元素的拖动
- 当图像转换为本地存储的DataURL时,EXIF被删除
- 按顺序添加和删除类
- iframe正在添加标签,需要删除它们
- 根据滚动方向和高度加载和删除内容页面
- 如果其他类出现在滚动高度,则删除该类
- 删除图像与一定的宽度和高度
- 使用jQuery或javascript删除循环行内高度
- 阅读更多按钮,逐渐删除最大高度
- 检查高度,然后添加或删除类
- 添加/删除CSS会导致IE9增加表格的高度
- 删除检测窗口大小并添加自动高度