图片懒加载-2(单张图片懒加载)

前期步骤和首屏幕懒加载的步骤类似。以下分析的是不同的地方。

延迟加载.png

显然,需要用window.onscroll去监听事件。但是有一个注意点,当满足A<B的条件后,不管图片是否加载成功(不成功是因为图片地址错误导致无法加载),此时window.onscroll应该不再去监听滚动事件了。

    var banner = document.querySelector('.banner');
    var imgFir = banner.getElementsByTagName('img')[0];

    window.onscroll = function () {
        if (banner.isLoad) { // 已经加载过了
            return; // 就不再执行了
        }
        var A = banner.offsetHeight + utils.offset(banner).top;
        var B = utils.win('clientHeight') + utils.win('scrollTop');

        if (A < B) {
            // 当条件,加载真实的图片,第一次加载完成后,再让页面继续滚动的过程中,
            // A<B的条件一直成立,又重新的执行了下面的操作,导致了重复给一个容器中的图片进行加载
            var oImg = new Image();
            oImg.src = imgFir.getAttribute('trueImg');
            oImg.onload = function () {
                console.log('ok');
                imgFir.src = oImg.src;
                imgFir.style.display = 'block';
                oImg = null;
            }
            banner.isLoad = true; // -> 设置一个自定义属性,告诉浏览器已经把图片加载完了
            // 不管是否正常加载,只要处理过一次,以后都不再处理了
        }
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,982评论 25 708
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,198评论 4 61
  • 我喜欢将人生的80年跟一天中的24小时进行对照 人生时钟的计算方法十分简单。24小时相当于1440分钟,而将此分成...
    _Claudia阅读 500评论 0 0
  • 茶之美,美在名。 中国茶喜欢以地名加特色命名,大多如此。 而我国地大物博,江山秀美,自古名山出好茶。 比如“黄山归...
    茶人老七阅读 200评论 0 0
  • 一时不知怎么开头,还是要说。 自从高中起便开始了住校的生涯,一直到大学。充满我的五六年青春是她们这些可爱的人,像花...
    蔚蓝11阅读 173评论 0 1