返回
手工构建JS-图片懒加载,搞懂工作原理提升开发效率!
前端
2023-09-16 12:27:11
前言
在学习图片懒加载之前,我们先看看什么是懒加载。
1. 什么是懒加载?
懒加载突出一个“懒”字,懒就是拖延迟的意思,所以“懒加载”说白了就是延迟加载,比如我们加载一个页面,这个页面很长很长,长到我们的浏览器都吃不消了,怎么办呢?是不是应该只加载我们当前屏幕能看到的部分,其他的等需要的时候再加载,这样不就可以减轻浏览器的负担了吗?这就是懒加载的精髓所在。
2. 图片懒加载的优势
图片懒加载的优势主要体现在以下几个方面:
- 提升页面加载速度:页面上图片资源往往比较大,如果采用传统的方式加载所有图片,会大大拖慢页面加载速度,使用图片懒加载可以有效避免这种情况。
- 减少带宽消耗:图片懒加载可以减少不必要的图片加载,从而减少带宽消耗,尤其是在移动端网络环境下,可以节省流量。
- 提升用户体验:页面加载速度慢,用户体验自然会受到影响,图片懒加载可以改善页面加载速度,从而提升用户体验。
3. 手写JS图片懒加载
现在我们开始手写一个JavaScript图片懒加载函数,我们称之为lazyLoad()
。
function lazyLoad() {
// 获取页面上所有需要懒加载的图片元素
const images = document.querySelectorAll("img[data-src]");
// 遍历所有图片元素
images.forEach((image) => {
// 获取图片的data-src属性值,该属性值就是图片的真实地址
const src = image.getAttribute("data-src");
// 检查图片是否在当前视口内
const isIntersecting = isElementIntersecting(image);
// 如果图片在当前视口内,则加载图片
if (isIntersecting) {
image.setAttribute("src", src);
}
});
}
在这个函数中,我们首先获取页面上所有需要懒加载的图片元素,然后遍历这些图片元素,获取它们的data-src属性值,即图片的真实地址。接下来,我们检查图片是否在当前视口内,如果在,则加载图片。
3.1 判断图片是否在当前视口内
我们使用IntersectionObserver API
来判断图片是否在当前视口内。
function isElementIntersecting(element) {
// 创建一个IntersectionObserver对象
const observer = new IntersectionObserver((entries) => {
// 遍历entries数组
entries.forEach((entry) => {
// 如果图片在当前视口内,则加载图片
if (entry.isIntersecting) {
const image = entry.target;
const src = image.getAttribute("data-src");
image.setAttribute("src", src);
}
});
});
// 观察图片元素
observer.observe(element);
}
在这个函数中,我们首先创建一个IntersectionObserver对象,然后观察图片元素。当图片进入或离开视口时,IntersectionObserver对象会触发回调函数,我们在回调函数中加载图片。
4. 结语
以上就是手写JavaScript图片懒加载的实现原理,希望对你有帮助。在实际开发中,你可以根据自己的需求对这个函数进行修改和扩展,以便更好地满足你的项目需求。