前端无限滚动一般指元素滚动到最后,动态加载更多数据。实现原理大只如下:
假设outer为外层容器, 则当滚动条滚动到最低端时
outer.scrollHeight = outer.scrollTop + outer.offsetHeight;
我们希望滚动到快到底部时触发加载,可以为outer添加滚动监听,当差值小于10像素时加载新数据, 其中注意滚动到小于10像素后会连续多次触发滚动事件,所以注意事件的节流处理(一个函数未执行完不再执行第二次),以下是一个简单示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
#box{
width: 300px;
height: 300px;
overflow: auto;
}
#item{
height: 400px;
background-color: aquamarine;
}
</style>
</head>
<body>
<div id="box">
<div id="item"></div>
</div>
</body>
<script type="text/javascript">
document.getElementById('box').addEventListener('scroll', function() {
if (!this.delay) {
this.delay = true;
const st = setTimeout(() => {
this.scrollTop + this.offsetHeight -10 > this.scrollHeight;
const item = document.createElement('div');
item.id = 'item';
this.appendChild(item);
this.delay = false;
clearTimeout(st);
}, 1000);
}
}, false);
</script>
</html>
网友评论