zoukankan      html  css  js  c++  java
  • js实现懒惰加载

    HTML代码:

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
            <title>lazyload-Leawee</title>
        </head>
        <body>

        <img class="lazy" src="img/HBuilder.png" data-src="http://www.baidu.com/img/baidu_jgylogo3.gif?v=32804268.gif" /> <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> <img src="img/HBuilder.png" data-src="img/微信加关注.jpg" class="lazy" /> <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> <img src="img/HBuilder.png" data-src="img/2008年作品.jpg" class="lazy" /> <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> <img src="img/HBuilder.png" data-src="img/2009年作品.jpg" class="lazy" /> </body> </html>

    js代码:

    <script type="text/javascript">

    var imgs = document.getElementsByClassName("lazy"); /*懒惰加载图片*/
    var imgsLen = imgs.length;
    var unloaded = imgsLen; /*标记还有多少个图片没有加载*/
    var clientHight = window.innerHeight || document.documentElement.clientHeight; /*浏览器用户可视窗口高度*/

    /*给图片设置真正的src*/
    function setImgSrc (index) {
    imgs[index].src = imgs[index].getAttribute("data-src"); /*取图片真正的地址*/
    --unloaded;
    }

    /*滚动事件处理*/
    function scrollHandler(index) {
    var scrollTop = document.body.scrollTop || document.documentElement.scrollTop; /*滚动离顶部距离*/
    for (var i = index; i < imgsLen; i++) {
    var offset = imgs[i].offsetTop; /*元素到顶部的偏移量*/
    if (scrollTop + clientHight > offset) {
    setImgSrc(i);
    } else {
    break;
    }
    }
    }

    /*监听滚动事件*/
    function myScrollListener() {
    var start = imgsLen-unloaded; /*查找第一个没有加载的图片的位置*/
    if (unloaded > 0) {
    scrollHandler(start);
    }
    }

    /*第一次加载加载页面的时候加载出现在用户视线里的图片*/
    function firstLoad() {
    for (var i = 0; i < imgsLen; i++) {
    var top = imgs[i].offsetTop;
    if (top < clientHight) {/*图片到顶部的位置如果小于客户端可视窗口的高度,则说明图片显示出来了*/
    setImgSrc(i);
    }else{
    break;
    }
    }
    }

    window.onscroll = myScrollListener;

    window.onload = firstLoad;



    </script>

    上面代码已经完全可以实现web的懒惰记载了。

    扩展:如果数据是分页的话,比如第一次加载100条,第二页又记载100条这样,可以像如下方式实现:

    HTML如下:

    <!DOCTYPE html>
    <html>
    
        <head>
            <meta charset="utf-8">
            <title>lazyload-Leawee</title>
        </head>
    
        <body>
            <div id="list">
                <img class="lazy" src="img/aaa.png" data-src="http://www.baidu.com/img/baidu_jgylogo3.gif?v=32804268.gif" />
                <br />
                <br />
                <br />
                <br />
                <br />
                <br />
                <br />
                <br />
                <br />
                <br />
                <br />
                <br />
                <br />
                <br />
                <br />
                <br />
                <br />
                <br />
                <br />
                <br />
                <br />
                <br />
                <br />
                <br />
                <br />
                <br />
                <br />
                <br />
                <br />
                <br />
                <br />
                <br />
                <br />
                <br />
                <br />
                <br />
                <img src="img/aaa.png" data-src="img/1登录界面.png" class="lazy" />
    
                <br />
                <br />
                <br />
                <br />
                <br />
                <br />
                <br />
                <br />
                <br />
                <br />
                <br />
                <br />
                <br />
                <br />
                <br />
                <br />
                <br />
                <br />
                <br />
                <br />
                <br />
                <br />
                <br />
                <br />
                <img src="img/aaa.png" data-src="img/close.png" class="lazy" />
    
                <br />
                <br />
                <br />
                <br />
                <br />
                <br />
                <br />
                <br />
                <br />
                <br />
                <br />
                <br />
                <br />
                <br />
                <br />
                <br />
                <br />
                <br />
                <br />
                <br />
                <br />
                <br />
                <br />
                <br />
                <img src="img/aaa.png" data-src="http://css16.tel.cdndm.com/v201511201052/default/images/logo.gif" class="lazy" />
                <br />
                <br />
                <br />
            </div>
            <button onclick="nextPage()">加载</button>
        </body>
    
    </html>
    <script src="js/lazyloadimg.js" type="text/javascript" charset="utf-8"></script>

    JS代码如下:

    <script type="text/javascript">
        window.onscroll = myScrollListener;
        window.onload = firstLoad;
    
        function nextPage() {
            var newImgs = ["http://static.googleadsserving.cn/pagead/imgad?id=CICAgKDT29reKRDQAhiYAjIIBTic4GnyLWU",
                "http://static.googleadsserving.cn/pagead/imgad?id=CICAgKDT29reKRDQAhiYAjIIBTic4GnyLWU",
                "http://static.googleadsserving.cn/pagead/imgad?id=CICAgKDT29reKRDQAhiYAjIIBTic4GnyLWU",
                "http://static.googleadsserving.cn/pagead/imgad?id=CICAgKDT29reKRDQAhiYAjIIBTic4GnyLWU",
                "http://static.googleadsserving.cn/pagead/imgad?id=CICAgKDT29reKRDQAhiYAjIIBTic4GnyLWU",
                "http://static.googleadsserving.cn/pagead/imgad?id=CICAgKDT29reKRDQAhiYAjIIBTic4GnyLWU",
                "http://static.googleadsserving.cn/pagead/imgad?id=CICAgKDT29reKRDQAhiYAjIIBTic4GnyLWU",
                "https://ss1.baidu.com/6ONXsjip0QIZ8tyhnq/it/u=1889789971,2360758735&fm=58",
                "img/1登录界面.png",
                "http://p4.gexing.com/kongjianpifu/20121124/1017/50b02e24e6e3a.jpg"
            ];
            for (var i = 0; i < newImgs.length; i++) {
                var li = document.createElement("img");
                li.setAttribute("src", "img/close.png");//设置默认图片
                li.setAttribute("data-src", newImgs[i]);//设置真是图片地址
                li.setAttribute("class", "lazy");      //设置延迟加载类
                document.getElementById("list").appendChild(li);//把新图片元素添加到UI图片列表里
            }
             imgs = document.getElementsByClassName(".lazy"); /*懒惰加载图片*/
             imgsLen = imgs.length;
             unloaded = unloaded+newImgs.length ; /*标记还有多少个图片没有加载*/
             nextOnLoad();
        }
        
        //加载下一页首次加载图片显示
        function nextOnLoad () {
            var scrollTop = document.body.scrollTop || document.documentElement.scrollTop; /*滚动离顶部距离*/
            for (var i = imgsLen - unloaded; i < imgsLen; i++) {
                var offset = imgs[i].offsetTop; /*元素到顶部的偏移量*/
                if (scrollTop + clientHight > offset) {
                    setImgSrc(i);
                } else {
                    break;
                }
            }
        }
    </script>

    转载请注明出处:http://www.cnblogs.com/Leawee/p/4533289.html 

  • 相关阅读:
    【剑指offer】判断二叉树是否为平衡二叉树
    【剑指offer】数字在排序数组中出现的次数
    八大排序方法汇总(选择排序,插入排序-简单插入排序、shell排序,交换排序-冒泡排序、快速排序、堆排序,归并排序,计数排序)
    约瑟夫环问题-循环链表VS数组
    告别2014,你是否感谢这一年的自己?
    浅谈WEB页面提速(前端向)
    HTML5- Canvas入门(七)
    浅谈WEB安全性(前端向)
    是时候搁置Grunt,耍一耍gulp了
    前端神器avalonJS入门(二)
  • 原文地址:https://www.cnblogs.com/Leawee/p/4533289.html
Copyright © 2011-2022 走看看