feat: 判断dom是否滚动到底部
This commit is contained in:
parent
fbf31624c3
commit
4c210cb365
159
html/滑动加载.html
Normal file
159
html/滑动加载.html
Normal file
@ -0,0 +1,159 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Document</title>
|
||||
<style>
|
||||
ul, li {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
li {
|
||||
display: flex;
|
||||
border: pink 1px solid;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
li .avatar {
|
||||
height: 100px;
|
||||
width: 100px;
|
||||
flex-basis: 100px;
|
||||
}
|
||||
li .content {
|
||||
line-height: 100px;
|
||||
text-align: center;
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
/* 全屏幕覆盖的加载动画 */
|
||||
.loader {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-color: rgba(255, 255, 255, 0.8); /* 白色半透明背景 */
|
||||
z-index: 9999; /* 确保在最顶层 */
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
/* 加载动画样式 */
|
||||
.loader::after {
|
||||
content: '';
|
||||
width: 50px;
|
||||
height: 50px;
|
||||
border-radius: 50%;
|
||||
border: 5px solid #333; /* 黑色边框 */
|
||||
border-top: 5px solid #fff; /* 白色顶部边框 */
|
||||
animation: spin 1s linear infinite; /* 旋转动画 */
|
||||
}
|
||||
|
||||
/* 旋转动画 */
|
||||
@keyframes spin {
|
||||
0% { transform: rotate(0deg); }
|
||||
100% { transform: rotate(360deg); }
|
||||
}
|
||||
|
||||
/* 其他页面内容样式 */
|
||||
.content {
|
||||
/* 添加你的内容样式 */
|
||||
}
|
||||
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<ul id="list"></ul>
|
||||
<div class="loader" style="visibility:hidden;"></div>
|
||||
<script>
|
||||
let data = [
|
||||
{
|
||||
avatar: '/upload/b178e0eaa1516fe27b3babd932aa37cc80b17472.jpg@942w_930h_progressive.jpeg',
|
||||
content: '我是皮特,我是圆蛤镇的一位出生,哈哈哈哈哈'
|
||||
},
|
||||
{
|
||||
avatar: '/upload/f892d57fedb12065c2b1379eb6f193ab91e9b364.jpg@942w_936h_progressive.jpeg',
|
||||
content: '我是路易斯老妈,我是圆蛤镇的一位出生,哈哈哈哈哈'
|
||||
},
|
||||
{
|
||||
avatar: '/upload/710827654220b2e2418aa9b24838974ea8b0f9fd.jpg@942w_921h_progressive.jpeg',
|
||||
content: '我是亚裔新闻记者,我是圆蛤镇的一位出生,哈哈哈哈哈'
|
||||
},
|
||||
{
|
||||
avatar: '/upload/8e5e9700d916e69f69c79cdb5f525d67ee9a3f0d.jpg@942w_927h_progressive.jpeg',
|
||||
content: '我是饺子,我是圆蛤镇的一位出生,哈哈哈哈哈'
|
||||
},
|
||||
{
|
||||
avatar: '/upload/39ab275203860c6fdfaa58d061cc262c7618a459.jpg@942w_923h_progressive.jpeg',
|
||||
content: '我是圆蛤镇的一位出生,哈哈哈哈哈'
|
||||
},
|
||||
{
|
||||
avatar: '/upload/c73b288188420cdc89ab913975fee837c79a058f.jpg@942w_927h_progressive.jpeg',
|
||||
content: 'shut up! meg'
|
||||
},
|
||||
{
|
||||
avatar: '/upload/5045ae78e674c40f0f295fdac12b6a9e7a11cce1.jpg@942w_920h_progressive.jpeg',
|
||||
content: '我是一只鸡,我是圆蛤镇的一位出生,哈哈哈哈哈'
|
||||
},
|
||||
{
|
||||
avatar: '/upload/08e724093b3384d5b5186919a03caaa7b2b0d276.jpg@942w_933h_progressive.jpeg',
|
||||
content: '我是Lois老爸,我是圆蛤镇的一位出生,哈哈哈哈哈'
|
||||
},
|
||||
{
|
||||
avatar: '/upload/6f69059fc87968768f9ea38659b9c194700b4b0b.jpg@942w_924h_progressive.jpeg',
|
||||
content: '我是chrim,我爱🦌管'
|
||||
},
|
||||
{
|
||||
avatar: '/upload/65f2d1791026a08c58d544628b4745513c013b78.jpg@942w_924h_progressive.jpeg',
|
||||
content: '我是上帝,我是圆蛤镇的一位出生,哈哈哈哈哈'
|
||||
}
|
||||
]
|
||||
|
||||
// 获取dom
|
||||
let list = document.querySelector("#list")
|
||||
// 渲染函数,把提供的数据追加到后面
|
||||
function renderList(data) {
|
||||
data.forEach(item => {
|
||||
// 创建li标签,往li标签里面添加内容,然后依次追加到list中去
|
||||
let li = document.createElement('li');
|
||||
li.innerHTML = `<img class="avatar" src="${item.avatar}" alt="">
|
||||
<div class="content">${item.content}</div>`
|
||||
list.appendChild(li)
|
||||
});
|
||||
}
|
||||
|
||||
// 初始化渲染
|
||||
renderList(data.map(item=>({...item, avatar: 'https://blog.icoding.fun' + item.avatar})))
|
||||
|
||||
/*
|
||||
在JavaScript中,你可以使用 scroll 事件来监听滚动,并结合一些属性来判断是否滑动
|
||||
到了页面底部。一个常用的方法是检查scrollTop 和 clientHeight 属性与 scrollHeight 属性的关系。
|
||||
当 scrollTop + clientHeight 等于 scrollHeight 时,表示页面已经滚动到了底部。
|
||||
*/
|
||||
let flag = false // 是否已经到底
|
||||
let loader = document.querySelector(".loader")
|
||||
new Promise((resove)=>{ // 如果直接监听会导致dom刷新时触发scroll事件,所以等加载完成之后再监听
|
||||
window.onload = function(){
|
||||
resove(1)
|
||||
}
|
||||
}).then((res)=>{
|
||||
window.addEventListener('scroll', function(){
|
||||
if(flag) return
|
||||
if ((window.innerHeight + window.scrollY) >= document.body.scrollHeight) {
|
||||
flag = true
|
||||
// 追加新的数据
|
||||
loader.style.visibility = "visible"
|
||||
setTimeout(() => {
|
||||
let nData = data.sort(()=>Math.random() - 0.5) // 打乱数组
|
||||
renderList(data.map(item=>({...item, avatar: 'https://blog.icoding.fun' + item.avatar})))
|
||||
flag = false
|
||||
loader.style.visibility = "hidden"
|
||||
}, 1000);
|
||||
}
|
||||
})
|
||||
})
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
36
html/滑动底部判断.html
Normal file
36
html/滑动底部判断.html
Normal file
@ -0,0 +1,36 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Document</title>
|
||||
<style>
|
||||
.parent {
|
||||
height: 300px;
|
||||
background-color: aquamarine;
|
||||
overflow: scroll;
|
||||
}
|
||||
.son {
|
||||
height: 1000px;
|
||||
width: 80%;
|
||||
margin: 0 auto;
|
||||
background: linear-gradient(to bottom, #ff0000, #00ff00); /* 从上到下的颜色渐变 */
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="parent">
|
||||
<div class="son"></div>
|
||||
</div>
|
||||
<script>
|
||||
let parent = document.querySelector(".parent")
|
||||
let son = document.querySelector(".son")
|
||||
// 元素的ScrollTop(卷上去的高度) + clientHeight (元素盒子模型的内容高度 content + padding) >= scrollHeight(元素能滚动的高度)
|
||||
parent.onscroll = function(){
|
||||
if (parent.scrollTop + parent.clientHeight > parent.scrollHeight - 10) {
|
||||
alert("到底部了")
|
||||
}
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
Loading…
x
Reference in New Issue
Block a user