需要再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(() => {
++indexSum
for (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>