0%

实现图片懒加载的JavaScript函数

在Web开发中,图片懒加载可以延迟加载页面上的图片,以提高页面加载性能和用户体验。用户在页面加载时不立即加载所有图片,而是等到图片即将进入用户视野时再进行加载。通过延迟加载图片,可以减少初始加载的资源数量,提高页面的加载速度,特别适用于包含大量图片的网页。

定义滚动监听和加载函数:

思路:我们定义一个名为runLazyLoad的函数,它通过监听滚动事件实现了图片的懒加载功能。当页面滚动时,函数会计算滚动距离,并根据一定规则加载新的图片。

函数内部的loadLazyLoadedImages函数用于实际加载图片。它首先获取所有带有data-src属性的图片元素,然后逐个加载这些图片,直到达到指定的加载数量。从而达到懒加载效果。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
let previousLoadCount = 0;

function runLazyLoad(origin) {
loadLazyLoadedImages(origin, 0);
window.addEventListener('scroll', function () {
const scrollDistance = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;
if (scrollDistance > 0) {
const initialLoadCount = Math.floor(scrollDistance / 300) * 9 + 9;
const newLoadCount = initialLoadCount - previousLoadCount;
if (newLoadCount > 0) {
loadLazyLoadedImages(newLoadCount);
previousLoadCount = initialLoadCount;
}
}
});
}

Math.floor(scrollDistance / 300) * 9 + 9;: 每滚动300的距离就加载9张图片进来。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function loadLazyLoadedImages(count) {
const lazyImages = document.querySelectorAll('[data-src]');
let loadedCount = 0;

lazyImages.forEach(img => {
if (loadedCount >= count) {
return;
}
img.style.backgroundImage = `url(${img.getAttribute('data-src')})`;
img.removeAttribute('data-src');
loadedCount++;
});
}

如何使用:

将需要进行懒加载的图片元素添加data-src属性,并将其值设置为对应图片的URL。

html

1
<img data-src="path/to/image.webp" alt="Lazy-loaded Image">

javascript

1
node.setAttribute('data-src', "path/to/image.webp");

在需要启动的页面,调用runLazyLoad(0); //0 为页面默认需要加载的个数,可以根据需要进行调整。

-------------本文结束感谢您的阅读-------------