出于某种原因,在移动设备(具体来说是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/

10-16 09:37