• 简单理解懒加载技术


    懒加载原理就是先利用自定义属性存放图片资源,然后监听浏览器窗口,滑动的时候才设置图片资源(发送请求),从而实现懒加载效果。

    代码如下:

    <!DOCTYPE HTML>
    
    <html>
    
        <head>
            <meta charset="utf-8" />
            <title>懒加载</title>
    
        </head>
        <style type="text/css">
            div:not(#wrapper) {
                display: block;
                height: 400px;
            }
        </style>
    
        <body>
    
            <div id="wrapper">
    
                <a href="#" class="image featured"><img data-src="http://img02.sogoucdn.com/app/a/100520093/60d2f4fe0275d790-fbe7539243950f9f-7f669dbeead0ad667f21be96b5efd843.jpg" /></a>
                <div>占位</div>
                <a href="#" class="image featured"><img data-src="http://bizhi.zhuoku.com/2010/10/22/kuanping/kuanping39.jpg" /></a>
                <div>占位</div>
                <a href="#" class="image featured"><img data-src="http://image.tianjimedia.com/uploadImages/2011/306/MOH58845COC4.jpg" /></a>
                <div>占位</div>
                <a href="#" class="image featured"><img data-src="http://image.tianjimedia.com/uploadImages/2011/306/EQ2E3ZUPNMNV.jpg" /></a>
                <div>占位</div>
                <a href="#" class="image featured"><img data-src="http://a2.att.hudong.com/79/22/01000000000000119062273272179.jpg" /></a>
                <div>占位</div>
                <a href="#" class="image featured"><img data-src="http://img1.3lian.com/2015/w7/90/d/5.jpg" /></a>
                <div>占位</div>
    
                <script>
                    //针对firefox的load事件
                    window.addEventListener("DOMContentLoaded", lazyLoadImages);
                    //通用load事件
                    window.addEventListener("load", lazyLoadImages);
                    //浏览器窗口调整
                    window.addEventListener("resize", lazyLoadImages);
                    //页面滚动事件
                    window.addEventListener("scroll", lazyLoadImages);
    
                    function lazyLoadImages() {
    
                        var images = document.querySelectorAll("img[data-src]");
                        //遍历所有的img标签
                        //[].forEach.call(...)是Array.prototype.forEach.call(...)简写
                        [].forEach.call(images, function(item) {
                            //item是images数组对象,即是一个个img标签
                            if(elementInViewport(item)) {
                                //将data-src替换src属性
                                item.setAttribute("src", item.getAttribute("data-src"));
                                item.removeAttribute("data-src")
                            }
                        })
    
                        if(images.length == 0) {
                            window.removeEventListener("DOMContentLoaded", lazyLoadImages);
                            window.removeEventListener("load", lazyLoadImages);
                            window.removeEventListener("resize", lazyLoadImages);
                            window.removeEventListener("scroll", lazyLoadImages);
                        }
    
                    }
                    //元素
                    function elementInViewport(el) {
                        //获取DOMRect对象边框相对于浏览器的位置
                        var rect = el.getBoundingClientRect();
                        //返回DOMRect对象上下左右的位置坐标
                        return(
                            rect.top >= 0 &&
                            rect.left >= 0 &&
                            rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&
                            rect.right <= (window.innerWidth || document.documentElement.clientWidth)
                        );
                    }
                </script>
        </body>
    
    </html>

    附图:

    从上图可以看出连续发送请求来加载图片。

    PS:此代码仅用于研究懒加载功能具体怎么实现。具体请参考LazyLoad.js插件。

    总结:实际的项目中,建议使用LazyLoad.js(2.0)插件或者blazy.js插件,提高页面性能。

  • 相关阅读:
    使用python内置模块os和openpyxl搜索指定文件夹下Excel中的内容
    python实现DNA序列字符串转换,互补链,反向链,反向互补链
    PandaSeq安装报错ltld required, install libtool library
    使用MySQL客户端登录Ensemble数据库查询相关信息
    第118天:移动端开发——视口
    第117天:Ajax实现省市区三级联动
    第116天: Ajax运用artTemplate实现菜谱
    第115天:Ajax 中artTemplate模板引擎(一)
    第114天:Ajax跨域请求解决方法(二)
    第113天:Ajax跨域请求解决方法
  • 原文地址:https://www.cnblogs.com/Sroot/p/5830047.html
Copyright © 2020-2023  润新知