js 实现加载更多

文章介绍了如何利用IntersectionObserverAPI来优化加载更多的功能,推荐在loading元素进入视口时触发加载,而不是使用传统的滚动事件监听。IntersectionObserver允许更精确地控制何时加载新内容,减少不必要的网络请求,并提供了配置选项如thresholds和rootMargin。
摘要由CSDN通过智能技术生成

js 实现加载更多

1. 使用滚动事件监听(不推荐)

2. 当loading元素出现在页面视口的时候,我们才会去触发加载更多(推荐)

  • 用到的函数 监听元素重叠 IntersectionObserver
// loading
var loading = document.querySelector('.loading');
// 网络请求: false完成 true未完成
var isLoading = false;

// 建立观察者(图片懒加载也可以IntersectionObserver来做)
var ob = new IntersectionObserver((entries, obInstance) => {
   // 此函数会触发两次(进入和离开到达 重叠范围的值时,都会触发。可通过 isIntersecting 属性来判断触发的动作:true元素从非交叉状态到交叉状态 false元素从交叉状态到非交叉状态)
  
  // entries数组:重叠的元素;
  let entry = entries[0];
  if(entry.isIntersecting && !isLoading) {
    // 加载更多
  }
}, {
  // root: ''// 不传默认是视口
  thresholds: 0.1// 重叠范围:值0-1
});

// 观察
ob.observe(loading);// 使 IntersectionObserver 开始监听一个目标元素
ob.disconnect();// 停止 IntersectionObserver 监听
ob.unobserve(loading);// 使 IntersectionObserver 停止监听特定目标元素

3. IntersectionObserver(callback[, options])详解

  • 1. 配置属性

属性描述
root 边界盒 Element 对象 (默认:视口)
rootMargin一个在计算交叉值时添加至根的边界盒(bounding_box)中的一组偏移量,类型为字符串,可以有效的缩小或扩大根的判定范围从而满足计算需要。语法大致和 CSS 中的 margin 属性等同,默认值是"0px 0px 0px 0px"
thresholds规定了一个监听目标与边界盒交叉区域的比例值,值:0 - 1 之间。若值 0,则意味着监听元素即使与根有 1 像素交叉,此元素也会被视为可见。
  • 2. callback的第一个参数

返回的是一个数组,里面存放着一些元素信息,下面所有属性都是只读,有以下属性

属性描述
boundingClientRect返回包含目标元素的边界信息的 DOMRectReadOnly. 边界的计算方式与 Element.getBoundingClientRect() 相同.
intersectionRatio返回 intersectionRect 与 boundingClientRect 的比例值,如果大于 0 则表示可见,完全可见为 1.
intersectionRect返回一个 DOMRectReadOnly 用来描述根和目标元素的相交区域.
isIntersecting触发的动作:true元素从非交叉状态到交叉状态 false元素从交叉状态到非交叉状态
rootBounds返回一个 DOMRectReadOnly 用来描述交叉区域观察者(intersection observer)中的根.
target与根出现相交区域改变的元素 (Element).
time返回一个记录从 IntersectionObserver 的时间原点(time origin)到交叉被触发的时间的时间戳(DOMHighResTimeStamp).
  • 3. 实例方法详解

observe.[方法名]()

方法名描述
disconnect停止次实例的所有监听
observe开始监听一个目标元素
unobserve停止监听特定目标元素
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值