一、需求
移动端下拉到底,加载更多数据。由于网页的执行都是单线程的,在JS
执行的过程中,页面会呈现阻塞状态。因此,如果JS
处理的数据量过大,过程复杂,可能会造成页面的卡顿。传统的数据展现都以分页的形式,但是分页的效果并不好,需要用户手动点击下一页,才能看到更多的内容。有很多网站使用无限分页的模式,即网页视窗到达内容底部就自动加载下一部分的内容。
二、概念
clientHeight:视口(viewport)的高度,就是我们在浏览器中所能看到内容的高度;
screenHeight:屏幕高度,实际移动设备的屏幕高度。
scrollHeight:真实内容的高度;
scrollTop:视窗上面隐藏掉的部分。
三、原理
真实内容高度 - 视窗高度 - 上面隐藏的高度 < 20,作为加载的触发条件
四、实现方法
1,获取滚动条到文档顶部的距离
var scrollTop = document.documentElement.scrollTop; //或 var scrollTop = Math.ceil($(this).scrollTop());
2,获取可视区高度
var v_height = document.documentElement.clientHeight; //或 var v_height = $(this).height();
3,获取文档总高度
var d_height = document.body.scrollHeight; //或 var d_height = $(document).height();
4,添加滚动监听事件
$(window).scroll(function(){});
5,真实内容高度 - 视窗高度 - 上面隐藏的高度 < 20,作为加载的触发条件
$(function(){ getData(); $(window).scroll(function(){ var scrollTop = Math.ceil($(this).scrollTop()); var v_height = $(this).height(); var d_height = $(document).height(); if(d_height - v_height - scrollTop < 20){ showLoading(); getData(); hideLoading(); } }) })
五、触发请求常用判断
function condition(){ var pageHeight = Math.max(document.body.scrollHeight,document.body.offsetHeight); var viewportHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight || 0; var scrollHeight = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0; return pageHeight - viewportHeight - scrollHeight < 20; }