封装图片懒加载处理函数
摘要:代码解释 懒加载也加延迟加载、按需加载,指在长网页中延迟加载图片数据,是一种较好的网页性能优化的方式。 优点 减少了无用资源的加载 提升用户体验 防止加载过多图片而影响其他资源文件的加载 实现原理 方式一:浏览器原生API交叉观察者模式(IntersectionObserver IntersectionObserver 是一种浏览器提供的JavaScript API,用于监测元素与视窗的交叉状态。它能够告诉开发者一个元素是否进入或离开视窗,以及两者的交叉区域的大小和位置。 方式二:监听元素的 offsetTop 是否小于或等于浏览器可视区与已滚动距离之和...
代码解释
懒加载也加延迟加载、按需加载,指在长网页中延迟加载图片数据,是一种较好的网页性能优化的方式。
优点
1. 减少了无用资源的加载
2. 提升用户体验
3. 防止加载过多图片而影响其他资源文件的加载
实现原理
方式一:浏览器原生API交叉观察者模式(IntersectionObserver)
IntersectionObserver 是一种浏览器提供的JavaScript API,用于监测元素与视窗的交叉状态。它能够告诉开发者一个元素是否进入或离开视窗,以及两者的交叉区域的大小和位置。
方式二:监听元素的 offsetTop 是否小于或等于浏览器可视区与已滚动距离之和
imgs.offsetTop<=window.innerHeight+document.body.scrollTop
window.innerHeight是浏览器可视区的高度
document.body.scrollTop || document.documentElement.scrollTop是浏览器滚动过的距离
imgs.offsetTop是元素顶部距离文档顶部的高度(包括了滚动条的距离)
代码实现
const DATA_SRC = 'data-src';
// IntersectionObserver 观察者模式
const observer = new IntersectionObserver((entries, observer) => {
entries.forEach(entry => {
if(entry.isIntersecting){
const img = entry.target;
img.setAttribute('src', img.getAttribute(DATA_SRC) ?? '')
observer.unobserve(img);
}
})
})
// 通过监听滚动事件
function scroll(el){
let clinetH = document.documentElement.clientHeight || window.innerHeight;
let scrollT = document.documentElement.scrollTop;
let offsetTop = el.offsetTop
if( offsetTop <= clinetH + scrollT ){
el.setAttribute('src', el.getAttribute(DATA_SRC) ?? '')
}
}
function lazyload(el, bilding){
el.getAttribute(DATA_SRC) ?? el.setAttribute(DATA_SRC, bilding.value)
'IntersectionObserver' in window ? observer.observe(el) : (window.addEventListener('load', () => scroll(el)), window.addEventListener('scroll', () => scroll(el)))
}
export { lazyLoad }
本文链接:https://blog.smallhao.fun/?id=5 转载需授权!
Chen’Blog版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!