需要再web端实现上拉加载 纯属web端的东西
类似这样的功能效果
能够在web端实现滚动分页
overflow-y: scroll;
首先给这个大盒子 一个 css 样式 支持滚动 再给固定高度
这个盒子里的内容就能立马滚动起来
给这个盒子一个ref 的属性 以及 有原生滚动事件 scroll
const handleScroll = () => {if (scrollBox.value.scrollTop + scrollBox.value.clientHeight >= scrollBox.value.scrollHeight) {// 滚动到底部的逻辑console.log('滚动到底部了')// 例如,你可以在这里发起一个请求来加载更多数据}
}
在这个里面就可以实现滚动的监听 滑动到底部 就可以知道 然后可以实现分页
这个是vue3 里实现的功能 因为是web端 一般没有这样的滚动效果 既然问题出来了 就肯定有解决办法 所以就是以上的写法。
原生html 中的滚动我这里也有部分代码 我就不详细解释了 大家都能看懂的 原生html 用的也少了 移动端中有封装好的scroll-view 所以就更简单了
<!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>.hide {display: none;}.scroll {height: 200px;width: 300px;overflow-y: auto;border: 1px solid #ddd;}.loading {text-align: center;}ul {margin: 0;padding: 0;}li {padding: 10px;margin: 10px;text-align: center;background: red;list-style-type: none;}</style>
</head><body><div id="js-scroll" class="scroll"><ul id="js-list"><li>000000</li><li>000000</li><li>000000</li><li>000000</li><li>000000</li></ul><div class="loading hide" id="js-loading">加载中...</div></div>
</body><script>let indexSum = 0 // 列表个数const listDom = document.getElementById('js-list')const loadingDom = document.getElementById('js-loading')/*** 使用MutationObserver监听列表的 DOM 改变*/const config = {attributes: true, // 布尔值,属性的变动childList: true, // 布尔值,子节点的变动(指新增、删除、更改)subtree: true // 布尔值,表示,是否将该观察器,应用于该节点的所有后代节点}const callback = function (mutationsList, observer) {for (let mutation of mutationsList) {if (mutation.type === 'childList') {if (indexSum === 5) {loadingDom.innerText = '加载完毕'} else {loadingDom.classList.add('hide')}}}}const observer = new MutationObserver(callback)observer.observe(listDom, config)/*** clientHeight 滚动可视区域高度* scrollTop 当前滚动位置* scrollHeight 整个滚动高度*/const scrollDom = document.getElementById('js-scroll')scrollDom.onscroll = () => {if (scrollDom.clientHeight + parseInt(scrollDom.scrollTop) === scrollDom.scrollHeight) {if (loadingDom.classList.contains('hide') && indexSum <= 5) {loadingDom.classList.remove('hide')addList()}if (indexSum >= 5) {observer.disconnect() // 加载完毕停止监听列表 DOM 变化}}}/*** 添加列表*/function addList() {const fragment = document.createDocumentFragment()setTimeout(() => {++indexSumfor (let i = 0; i < 5; i++) {const li = document.createElement('li')li.innerText = new Array(6).fill(indexSum).join('')fragment.appendChild(li)}listDom.appendChild(fragment)}, 1000)}</script></html>