我有一个包含许多方形图像(相同宽度和高度)的页面,其中大小由宽度控制:50%。它们将延迟加载使用IntersectionObserver的lozad.js(https://www.npmjs.com/package/lozad)。问题是,IntersectionObserver将计算所有图像的可见性,因为高度为0(或未知),所有图像将立即加载。我想设置高度与宽度相同,但看不出这是怎么回事!?
<img class="lozad" style="width:50%;" data-src="1.jpeg">
<img class="lozad" style="width:50%;" data-src="2.jpeg">
<img class="lozad" style="width:50%;" data-src="3.jpeg">
<img class="lozad" style="width:50%;" data-src="4.jpeg">
<img class="lozad" style="width:50%;" data-src="5.jpeg">
<img class="lozad" style="width:50%;" data-src="6.jpeg">
.
.
.
.
<img class="lozad" style="width:50%;" data-src="99.jpeg">
<img class="lozad" style="width:50%;" data-src="100.jpeg">
答案 0 :(得分:0)
我在不使用lozad.js的情况下实现了the similar page。
这个想法是基于这样的假设:你可以估算出可以保证始终覆盖可用屏幕高度的图像数量,比如说INTERSECT_PAGESIZE = 2
。然后,当用户使用IntersectionObserver
API向下滚动页面时,您的页面只能加载2张图片并延迟加载屏幕外图像。
首先,您的网页模板提供了从0开始的其他data-idx
:
<img data-idx="0" data-src="0.jpeg" class="image1">
<img data-idx="1" data-src="1.jpeg" class="image1">
<img data-idx="2" data-src="2.jpeg" class="image1">
...
因此,当首先加载页面时,由于尚未提供src
属性,因此不会加载任何图像。然后下面的伪代码显示了你的javascript可以做什么:
img.image1
代码并将其保留为list
img
,添加调用load
this.observe(img)
事件监听器
indexToObserve
setter中,对于来自给定索引的前2 img
s,设置src
属性,其值为data-src
indexToObserve
以触发加载2个以上的图像更多细节解释here提供了3个示例(使用普通的javascript,Angular或React)以及指向repos和demos的链接。