1、功能描述:

当页面内容超过一屏,没有分页功能,且页面滚动到底部时,希望自动加载更多数据。这时候就需要监听页面是否滚动到底部,并在滚动到底部时,执行回调函数。

2、代码实现:

/**
 * 页面滚动到底部触发监听,执行回调
 * @param callBack
 */
export function scrollToBottom (callBack) {
  window.onscroll = () => {
    let scrollTop = 0
    let bodyScrollTop = 0
    let documentScrollTop = 0
    if(document.body) {
      bodyScrollTop = document.body.scrollTop
    }
    if(document.documentElement) {
      documentScrollTop = document.documentElement.scrollTop
    }
    scrollTop = (bodyScrollTop - documentScrollTop > 0) ? bodyScrollTop : documentScrollTop
    let scrollHeight = 0
    let bodyScrollHeight = 0
    let documentScrollHeight = 0
    if(document.body) {
      bodyScrollHeight = document.body.scrollHeight
    }
    if(document.documentElement) {
      documentScrollHeight = document.documentElement.scrollHeight
    }
    // 获取文档元素的内容垂直滚动的像素数
    scrollHeight = (bodyScrollHeight - documentScrollHeight > 0) ? bodyScrollHeight : documentScrollHeight
    let windowHeight = 0
    // 判断当前文档的渲染模式是混杂模式还是"标准模式"
    if(document.compatMode === 'CSS1Compat') { // “标准模式”或者“准标准模式(almost standards mode)”
      windowHeight = document.documentElement.clientHeight
    } else { // 混杂模式,值为"BackCompat"
      windowHeight = document.body.clientHeight
    }
    // 若文档内容垂直滚动像素 + 当前窗口高度的像素 === document.body.scrollHeight或document.documentElement.scrollHeight返回Promise对象,执行后续操作
    if(scrollTop + windowHeight === scrollHeight) {
      callBack()
    }
  }
}

3、使用: 

scrollToBottom (() => {
  console.log('滚动到底部了,在这实现加载更多...')
})

// or

scrollToBottom (function () {
  console.log('滚动到底部了,在这实现加载更多...')
})

4、测试结果:

监听页面滚动实现加载更多功能

5、相关API资料:

scrollTop API:https://developer.mozilla.org/zh-CN/docs/Web/API/Element/scrollTop

compatMode API:https://developer.mozilla.org/zh-CN/docs/Web/API/Document/compatMode

相关文章:

  • 2022-12-23
  • 2021-08-27
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-01-08
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-07-19
  • 2022-12-23
相关资源
相似解决方案