首页前端工具函数封装图片懒加载处理函数

封装图片懒加载处理函数

分类前端工具函数时间2023-06-15 10:07:20发布RustStream浏览109
摘要:代码解释 懒加载也加延迟加载、按需加载,指在长网页中延迟加载图片数据,是一种较好的网页性能优化的方式。 优点 减少了无用资源的加载 提升用户体验 防止加载过多图片而影响其他资源文件的加载 实现原理 方式一:浏览器原生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版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

JavaScriptVue
Throttle节流与Debounce防抖 前端深拷贝

游客 回复需填写必要信息
召唤伊斯特瓦尔