如何获得 window 高度和滚动位置之间的差异?
how to get difference between window height and scroll location?
我想自定义无限滚动,所以当我尝试这个时
const scrollPosition = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;
if(window.innerHeight-scrollPosition >100){
console.log("end")
}
但是没用。
如果你想知道什么时候你距离末尾有 100 个像素,那么你可以获取当前元素的 scrollHeight 并减去父元素的高度,然后再减去额外的 100。
现在将它与 parentElements scrollTop 进行比较,如果它更大,那么您的滚动条就在这个 100px 部分内..
下面的示例.. 如果您向下滚动到距离末尾 100 像素以内,背景将变为银色。
document.body.innerText =
new Array(400).fill('Scroll me down, ').join('');
window.addEventListener('scroll', (e) => {
const body = document.body;
const parent = body.parentElement;
const pixelsFromBottom =
body.scrollHeight -
parent.clientHeight
-100;
body.classList.toggle('inf'
,parent.scrollTop > pixelsFromBottom);
});
.inf {
background-color: silver;
}
这不仅适用于正文,也适用于任何子控件,下面我创建了一个页眉页脚和一个可滚动区域。
const scroller = document.querySelector('main');
const target = document.querySelector('.content');
target.innerText =
new Array(400).fill('Scroll me down, ').join('');
scroller.addEventListener('scroll', (e) => {
const body = target;
const parent = body.parentElement;
const pixelsFromBottom =
body.scrollHeight -
parent.clientHeight
-100;
parent.classList.toggle('inf'
,parent.scrollTop > pixelsFromBottom);
});
html, body {
height: 100%;
width: 100%;
padding: 0;
margin: 0;
background-color: cyan;
overflow: hidden;
}
body {
display: flex;
flex-direction: column;
}
main {
position: relative;
flex: auto;
overflow-y: scroll;
background-color: white;
}
.content {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
}
.inf {
background-color: silver;
}
<header>This is a header</header>
<main><div class="content">main</div></main>
<footer>This is the footer</footer>
我想自定义无限滚动,所以当我尝试这个时
const scrollPosition = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;
if(window.innerHeight-scrollPosition >100){
console.log("end")
}
但是没用。
如果你想知道什么时候你距离末尾有 100 个像素,那么你可以获取当前元素的 scrollHeight 并减去父元素的高度,然后再减去额外的 100。
现在将它与 parentElements scrollTop 进行比较,如果它更大,那么您的滚动条就在这个 100px 部分内..
下面的示例.. 如果您向下滚动到距离末尾 100 像素以内,背景将变为银色。
document.body.innerText =
new Array(400).fill('Scroll me down, ').join('');
window.addEventListener('scroll', (e) => {
const body = document.body;
const parent = body.parentElement;
const pixelsFromBottom =
body.scrollHeight -
parent.clientHeight
-100;
body.classList.toggle('inf'
,parent.scrollTop > pixelsFromBottom);
});
.inf {
background-color: silver;
}
这不仅适用于正文,也适用于任何子控件,下面我创建了一个页眉页脚和一个可滚动区域。
const scroller = document.querySelector('main');
const target = document.querySelector('.content');
target.innerText =
new Array(400).fill('Scroll me down, ').join('');
scroller.addEventListener('scroll', (e) => {
const body = target;
const parent = body.parentElement;
const pixelsFromBottom =
body.scrollHeight -
parent.clientHeight
-100;
parent.classList.toggle('inf'
,parent.scrollTop > pixelsFromBottom);
});
html, body {
height: 100%;
width: 100%;
padding: 0;
margin: 0;
background-color: cyan;
overflow: hidden;
}
body {
display: flex;
flex-direction: column;
}
main {
position: relative;
flex: auto;
overflow-y: scroll;
background-color: white;
}
.content {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
}
.inf {
background-color: silver;
}
<header>This is a header</header>
<main><div class="content">main</div></main>
<footer>This is the footer</footer>