手写图片懒加载

复制代码
//50ms节流方案
let lazyLoadThrottle = throttle(lazyLoad,50);
window.addEventListener('scroll',lazyLoadThrottle);

//raf的一帧节流方案
var isScroll = true;
window.addEventListener('scroll',function(){
    if(isScroll) return;
    requestAnimationFrame(lazyLoad);
})

function lazyLoad(opts){
    isScroll = true;
    let {conSel,imgSel,offset} = opts;
    let imgCon = document.querySelector(conSel);
    let rect = document.getBoundingClientRect();
    let clientH = document.documentElement.clientHeight;
    if(rect.top - clientH <= offset){
        let imgs = Array.from(imgCon.querySelector(imgSel));
        imgs.forEach(item => {
            let src = item.getAttribute('data-src');
            if(!src) return;
            item.src = src;
            item.removeAttribute('data-src');
        })
    }
}

function throttle(fn,interval){
    //last为0,cur必然大于它,fn会先立即执行一次
    let last = 0;
    return function(){
        let cur = +new Date();
        if(cur - last >= interval){
            fn.apply(this,args);
            last = cur;
        }
    }
}
复制代码

 

posted @   全玉  阅读(283)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2017-05-11 -webkit-overflow-scrolling
2017-05-11 二叉树的深度优先遍历和广度优先遍历
2017-05-11 数组去重方法总结
点击右上角即可分享
微信分享提示