图片懒加载

作者: DHFE | 来源:发表于2018-05-24 17:33 被阅读7次

在网页中,常常需要用到图片,而图片需要消耗较大的流量。正常情况下,浏览器会解析整个HTML代码,然后从上到下依次加载<img src="xxx">的图片标签。如果页面很长,隐藏在页面下方的图片其实已经被浏览器加载了。如果用户不向下滚动页面,就没有看到这些图片,相当于白白浪费了图片的流量。

所以,淘宝、京东这些流量非常巨大的电商,商品介绍页又必须有大量的图片,因此,这些页面的图片都是“按需加载”,即用户滚动页面时显示出来的时候才加载图片。当网速非常快的时候,用户并不能感知懒加载的动作,既省流量又不影响用户浏览。—— 廖雪峰 使用jQuery实现图片懒加载原理

基本思想是:在输出HTML的时候,不要直接输出<img src="xxx",而是将src的真正图片地址保存在data-src属性中。
当页面滚动时,如果图片出现在用户视野中,就利用jQuery把<img>的src属性替换为data-src的内容,浏览器就会实时加载。


1. 如何判断一个元素是否出现在窗口可视范围(浏览器的上边缘和下边缘之间,肉眼可视)。写一个函数 isVisible实现

原理示意图:

整个高度是document的高度,虚线代表用户浏览器视窗。
正方块和三角形代表了同一个元素的两种极值。
当一个元素由下至上进入用户视野,假设他刚好在视窗下方,此时会满足:target height(元素的offset) <= scrollTop + window height ,即滚动条已滚动的top值 + 窗口高度,只要target height 小于都可以,但大于的话,说明元素还是看不到,没有进入window。
另外一个情况就是,target height也必须大于scrollTop,否则也是没有进入用户window。

检测函数:

        function isVisible($node) {
            var scrollTop = $(window).scrollTop();  // 获取滚动条滚动高度
            var windowHeight = $(window).height();  // 获取视窗高度
            var offsetTop = $img.offset().top;      // 获取元素相对整个文档的高度

            if (offsetTop < scrollTop + windowHeight && offsetTop > scrollTop) {
                return true;
            }
            return false;
        }
2. 当窗口滚动时,判断一个元素是不是出现在窗口可视范围。每次出现都在控制台打印 true

测试代码:

<body>
<h1>222</h1>
<h1>222</h1>
<h1>222</h1>
<h1>222</h1>
<h1>222</h1>
<h1>222</h1>
<h1>222</h1>
<h1>222</h1>
<h1>222</h1>
<h1>222</h1>
<h1>222</h1>
<h1>222</h1>
<h1>222</h1>
<h1>222</h1>
<h1>222</h1>
<h1>222</h1>
<h1>222</h1>
<h1>222</h1>
<h1>222</h1>
<h1>222</h1>
<h1>222</h1>
<h1>222</h1>
<h1>333</h1>
<h1><img id="test_img" src="./img/img1.jpg" alt=""></h1>
<h1>222</h1>
<h1>222</h1>
<h1>222</h1>
<h1>222</h1>
<h1>222</h1>
<h1>222</h1>
<h1>222</h1>
<h1>222</h1>
<h1>222</h1>
<h1>222</h1>
<h1>222</h1>
<h1>222</h1>
<h1>222</h1>
<h1>222</h1>
<h1>222</h1>
<h1>222</h1>
<h1>222</h1>
<h1>222</h1>
<h1>222</h1>
<h1>222</h1>
<h1>222</h1>
<h1>222</h1>
<h1>222</h1>
<h1>222</h1>
<h1>222</h1>
<h1>222</h1>

</body>
<script>
        $(window).on("scroll",function() {
            $("#test_img").each(function() {    // 对元素使用isVisible()检测
                if (isVisible($(this))) {
                    console.log(true);
                }
            })
        })



        function isVisible($node) {
            var scrollTop = $(window).scrollTop();  // 获取滚动条滚动高度
            var windowHeight = $(window).height();  // 获取视窗高度
            var offsetTop = $node.offset().top;      // 获取元素相对整个文档的高度

            if (offsetTop < scrollTop + windowHeight && offsetTop > scrollTop) {
                return true;
            }
            return false;
        }
</script>

4. 当窗口滚动时,判断一个元素是不是出现在窗口可视范围。在元素第一次出现时在控制台打印 true,以后再次出现不做任何处理。
    $(".img img").attr("sign","false");
        $(window).on("scroll",function() {
            $(".img img").each(function() {    // 对元素使用isVisible()检测
                if (isVisible($(this)) && $(this).attr("sign") === "false") {

                    $(this).attr("sign","true");
                    console.log(true);

                }
            })
        })



        function isVisible($node) {
            var scrollTop = $(window).scrollTop();  // 获取滚动条滚动高度
            var windowHeight = $(window).height();  // 获取视窗高度
            var offsetTop = $node.offset().top;      // 获取元素相对整个文档的高度

            if (offsetTop < scrollTop + windowHeight && offsetTop > scrollTop) {
                return true;
            }
            return false;
        }

相关文章

  • 项目优化

    图片懒加载,数据懒加载, 路由懒加载 1.图片懒加载原理 1.1 开始时 不设置src属性 1.2 图片在可视区域...

  • JS

    JS 懒加载,预加载 概念:懒加载也叫延迟加载:JS图片延迟加载,延迟加载图片或符合某些条件时才加载某些图片。预加...

  • 图片懒加载

    懒加载与预加载的基本概念。 懒加载也叫延迟加载:JS图片延迟加载 延迟加载图片或符合某些条件时才加载某些图片。 预...

  • 图片懒加载

    图片懒加载 图片懒加载在一些图片密集型的网站中运用比较多,通过图片懒加载可以让一些不可视的图片不去加载,避免一次性...

  • js 实现图片懒加载

    一、懒加载 懒加载也叫延迟加载,Js中图片的延迟加载,延迟图片需要符合某些条件时才加载;对于图片过多的页面,为了加...

  • 图片懒加载和预加载

    图片懒加载的原理是什么? 首先明白为什么要懒加载: 懒加载即延迟,对于图片过多的页面,为了加快页面加载速度,我们需...

  • selenuim和phantonJs处理网页动态加载数据的爬取

    一.图片懒加载 什么是图片懒加载? 图片懒加载是一种网页优化技术。图片作为一种网络资源,在被请求时也与普通静态资源...

  • 懒加载和瀑布流

    一、简述图片懒加载的实现原理 图片懒加载 若一开始,页面上有许多的图片要加载,而如果同时加载这么多图片,会消耗性能...

  • jquery懒加载、回到顶部

    1.知识点部分: 懒加载图片的原理是什么? 图片懒加载也称为曝光加载,将页面上的图片分批加载,只有当图片出现在wi...

  • 懒加载和预加载

    1)概念: 懒加载也叫延迟加载:JS图片延迟加载,延迟加载图片或符合某些条件时才加载某些图片。预加载:提前加载图片...

网友评论

    本文标题:图片懒加载

    本文链接:https://www.haomeiwen.com/subject/yvrljftx.html