对于分页需求,分页数据的请求触发十分重要,监听滑动到底的触发也有很多种。
1.IntersectionObserver监听
IntersectionObserver 接口(从属于 Intersection Observer API)提供了一种异步观察目标元素与其祖先元素或顶级文档视口(viewport)交叉状态的方法。其祖先元素或视口被称为根(root)。
由MDN文档可知,IntersectionObserver可以观察目标元素和父元素可视区域的重叠部分,即可以判断一个元素是否进入可视区域中。
所以可以在分页列表尾部,增加一个占位的被观察元素,当被观察的元素进入父元素可视区域,就是已经滚动到列表容器底部了。同时IntersectionObserver的异步观察可以在需要的时候触发回调执行。
例子:
<ul class="dataList"><button class="bottomnBtn">到底的介绍</button></ul><script>var page = 1, pageSie = 20;const obverseBottn = new IntersectionObserver((entries) => {// intersectionRatio 为 0,则目标在视野外,if (entries[0].intersectionRatio <= 0) return;getPaginationData()page += 1;})obverseBottn.observe(document.querySelector(".bottomnBtn"));function getPaginationData(){let fragme = new DocumentFragment();let bottomnBtn = document.querySelector(".bottomnBtn")for (let i = (page - 1) * pageSie; i < page * pageSie; i++) {let li = document.createElement('li');li.innerHTML = i;fragme.append(li);}bottomnBtn.parentNode.insertBefore(fragme, bottomnBtn)}</script>
.dataList {width: 300px;height: 800px;border: 5px solid black;margin: 0 auto;overflow-y: scroll;list-style: none;}.dataList li {height: 50px;background-color: aquamarine;margin: 10px 0;}.bottomnBtn {width: 100%;height: 50px;background-color: transparent;}