出于某种原因,在移动设备(具体来说是iPhone X)上,我使用coords获得了一些魔力,其中基于页面offset
+current
高度总和的整页高度不等于主文档值:
const fullHeight = window.pageYOffset + document.documentElement.clientHeight
fullHeight !== document.documentElement.scrollHeight // why?
例如:
console.log(document.documentElement.clientHeight) // 635
console.log(window.pageYOffset) // 905
console.log(document.documentElement.scrollHeight) // 1675 !== (635 + 905)
总和:
635+905=>1540!==1675个
我发现隐藏的东西会给
clientHeight
值增加额外的高度。这只发生在手机上(在iPhone X os13,Chrome+Safari上测试),顺便说一句,桌面上的一切工作正常,为什么。。。更新:
我已经做了一些快速的解决方案来处理这个魔术,当我们到达页面底部时会得到通知:
const fullPageHeight = document.documentElement.scrollHeight
const scrollTop = window.pageYOffset
const currentScreenHeight = fullPageHeight - scrollTop
const isBottomNotHit = currentScreenHeight + scrollTop !== fullPageHeight
不过,它在移动和桌面设备上都能很好地工作。
最佳答案
芬纳利,我已经为任何遇到这个问题的人提供了一个很好的解决方案:
const lazyLoadScrollChecker = () => {
const _configuration = {
windowHeight: window.innerHeight,
fullPageHeight: document.documentElement.scrollHeight,
scrollTop: window.pageYOffset
}
const _calcCurrentScrollPosition = () => _configuration.fullPageHeight - _configuration.scrollTop
const _checkScreenCoords = () => {
const { windowHeight, fullPageHeight, scrollTop } = _configuration
return {
isBottomHitOnScroll: _calcCurrentScrollPosition() + scrollTop === fullPageHeight,
isBottomHitOnInitView: windowHeight === fullPageHeight
}
}
return _checkScreenCoords()
}
export default lazyLoadScrollChecker
这对我有很大帮助。干杯!
关于javascript - 在移动设备上,为什么pageYOffset + clientHeight不等于scrollHeight?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58758545/