JS实现滚动条触底加载更多

JavaScript07

JS实现滚动条触底加载更多,第1张

原理

1.通过监听滚动区域DOM的scroll事件, 计算出触底

// 滚动可视区域高度 + 当前滚动位置 === 整个滚动高度

scrollDom.clientHeight + scrollDom.scrollTop === scrollDom.scrollHeight

2.触底后触发列表添加, 列表添加使用createDocumentFragment, 将多次插入的DOM先存入内存, 最后一次填充进去, 提高性能, 也方便后面的MutationObserver监听

3.使用MutationObserver监听列表的DOM添加, 添加完毕后, 隐藏加载中提示

示例

https://codepen.io/klren0312/full/dybgayL

参考资料

https://developer.mozilla.org/zh-CN/docs/Web/API/Element/clientHeight

https://developer.mozilla.org/zh-CN/docs/Web/API/Element/scrollHeight

https://developer.mozilla.org/zh-CN/docs/Web/API/Element/scrollTop

https://developer.mozilla.org/zh-CN/docs/Web/API/GlobalEventHandlers/onscroll

https://developer.mozilla.org/zh-CN/docs/Web/API/Document/createDocumentFragment

https://developer.mozilla.org/zh-CN/docs/Web/API/MutationObserver

<!DOCTYPE=html>

<html>

<head>

<script src="js/jquery.js" type="text/javascript"></script>

<script type="text/javascript">

$(document).ready(function(){

var range = 50//距下边界长度/单位px

var elemt = 500 //插入元素高度/单位px

var maxnum = 20 //设置加载最多次数

var num = 1

var totalheight = 0

var main = $("#content")//主体元素

$(window).scroll(function(){

var srollPos = $(window).scrollTop() //滚动条距顶部距离(页面超出窗口的高度)

//console.log("滚动条到顶部的垂直高度: "+$(document).scrollTop())

//console.log("页面的文档高度 :"+$(document).height())

//console.log('浏览器的高度:'+$(window).height())

totalheight = parseFloat($(window).height()) + parseFloat(srollPos)

if(($(document).height()-range) <= totalheight &&num != maxnum) {

main.append("<div style='border:1px solid tomatomargin-top:20pxcolor:#ac"+(num%20)+(num%20)+"height:"+elemt+"' >hello world"+srollPos+"---"+num+"</div>")

num++

}

})

})

</script>

</head>

<body>

<div id="content" style="height:960px">

<div id="follow">this is a scroll test<br/> 页面下拉自动加载内容</div>

<div style='border:1px solid tomatomargin-top:20pxcolor:#ac1height:800' >hello world test DIV</div>

</div>

</body>

</html>