利用jquery实现滑动到屏幕底部时自动异步加载数据功能,对于需要异步分页的页面比较友好,
解析:
判断滚动条到底部,需要用到DOM的三个属性值,即scrollTop、clientHeight、scrollHeight。
scrollTop为滚动条在Y轴上的滚动距离。
clientHeight为内容可视区域的高度。
scrollHeight为内容可视区域的高度加上溢出(滚动)的距离。
从这个三个属性的介绍就可以看出来,滚动条到底部的条件即为scrollTop + clientHeight == scrollHeight。(兼容不同的浏览器)。
下面是jq的控制页面滑动到底部的代码:
$(window).scroll(
function() {
var scrollTop = $(this).scrollTop();
var scrollHeight = $(document).height();
var windowHeight = $(this).height();
if (scrollTop + windowHeight == scrollHeight) {
// 此处是滚动条到底部时候触发的事件,在这里写要加载的数据,或者是拉动滚动条的操作
alert("到底了,这里写逻辑");
}
});
案例:
<script>
//第一页自动由php遍历,第二页开始ajax请求
var page = <?php echo $data['pages'] > 0 ? intval($data['pages']) : 0;?>;
var pageSize = '<?php echo $data['pageSize'];?>';
var nowCount = '<?php echo !empty($data['data']) ? count($data['data']) : 0;?>';
var canPage = true;
$(window).scroll(
function () {
var scrollTop = $(this).scrollTop();
var scrollHeight = $(document).height();
var windowHeight = $(this).height();
if (scrollTop + windowHeight == scrollHeight) {
// 此处是滚动条到底部时候触发的事件,在这里写要加载的数据,或者是拉动滚动条的操作
if (nowCount == pageSize && canPage) {
page += 1;
$.ajax({
url: '我的内心角落里藏着一个不可能的你',
type: 'post',
dataType: 'json',
data: {
page: page,
},
success: function (res) {
var data = res.data;
if (data.length < pageSize) {
canPage = false;//判断是否可再次分页
}
if (data.length > 0) {
var html = '';
for (i = 0; i < data.length; i++) {
html += '<li><a href="detail&id=' + data[i].id + '"><div class="gg-product_img"><img src="' + data[i].pimg + '"></div><div class="gg-product_text tlie">' + data[i].pname + '</div><div class="gg-pprice"><span class="fl cldb3652 sz14r">¥' + (data[i].pprice / 100) + '</span><span class="fr cldb3652 sz14r glyphicon glyphicon-shopping-cart " style="margin-top:.06rem"></span><div class="clearfix"></div></div></a></li>';
}
$("#load").append(html)
}
},
error: function () {
alert('网络超时')
}
})
}
// console.log(data)
// alert("暂无数据");
}
});
</script>