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

本文介绍如何在页面内容超过一屏且无分页时,通过监听滚动事件判断是否到达底部,从而实现自动加载更多数据的功能。核心涉及scrollTop和compatMode等API,通过代码示例、使用说明和测试结果,详细解析这一过程。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值