分享

JS延时加载-面向对象版

 实力决定地位 2012-11-28
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www./TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www./1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>延时加载</title>
<style type="text/css">
body,div,ul,li{margin:
0;padding:0;}
#box{width:770px;margin:
0 auto;padding:10px 0 0 10px;background:#f00;overflow:hidden;zoom:1;}
#box li{
float:left;width:375px;height:225px;color:#fff;padding:10px 0;display:inline;text-align:center;margin:0 10px 10px 0;background:#000 url(http://js./learn/lesson10/img/lazy/loading.gif) 50% 50% no-repeat;}
#box li img.loaded{width:353px;height:225px;vertical-align:middle;}
</style>
</head>
<script type="text/javascript">
var fgm = {

    on: function(element, type, handler) {
       
return element.addEventListener ? element.addEventListener(type, handler, false) : element.attachEvent("on" + type, handler)
    },
    bind: function(
object, handler) {
       
return function() {
           
return handler.apply(object, arguments)   
        }
    },
    pageX: function(element) {
       
return element.offsetLeft + (element.offsetParent ? arguments.callee(element.offsetParent) : 0)
    },
    pageY: function(element) {
       
return element.offsetTop + (element.offsetParent ? arguments.callee(element.offsetParent) : 0)   
    },
    hasClass: function(element, className) {
       
return new RegExp("(^|\\s)" + className + "(\\s|$)").test(element.className)
    },
    attr: function(element, attr, value) {
       
if(arguments.length == 2) {
           
return element.attributes[attr] ? element.attributes[attr].nodeValue : undefined
        }
       
else if(arguments.length == 3) {
            element.setAttribute(attr, value)
        }
    }
};
//延时加载
function LazyLoad(obj) {
   
this.lazy = typeof obj === "string" ? document.getElementById(obj) : obj;
   
this.aImg = this.lazy.getElementsByTagName("img");
   
this.fnLoad = fgm.bind(this, this.load);
   
this.load();
    fgm.on(window,
"scroll", this.fnLoad);
    fgm.on(window,
"resize", this.fnLoad);
}
LazyLoad.prototype
= {
    load: function() {
       
var iScrollTop = document.documentElement.scrollTop || document.body.scrollTop;
       
var iClientHeight = document.documentElement.clientHeight + iScrollTop;
       
var i = 0;
       
var aParent = [];
       
var oParent = null;
       
var iTop = 0;
       
var iBottom = 0;
       
var aNotLoaded = this.loaded(0);
       
if(this.loaded(1).length != this.aImg.length) {
           
for(i = 0; i < aNotLoaded.length; i++) {
                oParent
= aNotLoaded[i].parentElement || aNotLoaded[i].parentNode;
                iTop
= fgm.pageY(oParent);
                iBottom
= iTop + oParent.offsetHeight;
               
if((iTop > iScrollTop && iTop < iClientHeight) || (iBottom > iScrollTop && iBottom < iClientHeight)) {
                    aNotLoaded[i].src
= fgm.attr(aNotLoaded[i], "data-img") || aNotLoaded[i].src;
                    aNotLoaded[i].className
= "loaded";
                }
            }
        }
    },
    loaded: function(status) {
       
var array = [];
       
var i = 0;
       
for(i = 0; i < this.aImg.length; i++)
        eval(
"fgm.hasClass(this.aImg[i], \"loaded\")" + (!!status ? "&&" : "||") + "array.push(this.aImg[i])");
       
return array
    }
};
//应用
fgm.on(window, "load", function () {new LazyLoad("box")});
</script>
<body>
<ul id="box">
    <li><img src="http://js./learn/lesson10/img/lazy/none.gif" data-img="http://js./learn/lesson10/img/lazy/1.jpg" /></li>
    <li><img src="http://js./learn/lesson10/img/lazy/none.gif" data-img="http://js./learn/lesson10/img/lazy/2.jpg" /></li>
    <li><img src="http://js./learn/lesson10/img/lazy/none.gif" data-img="http://js./learn/lesson10/img/lazy/3.jpg" /></li>
    <li><img src="http://js./learn/lesson10/img/lazy/none.gif" data-img="http://js./learn/lesson10/img/lazy/4.jpg" /></li>
    <li><img src="http://js./learn/lesson10/img/lazy/none.gif" data-img="http://js./learn/lesson10/img/lazy/5.jpg" /></li>
    <li><img src="http://js./learn/lesson10/img/lazy/none.gif" data-img="http://js./learn/lesson10/img/lazy/6.jpg" /></li>
    <li><img src="http://js./learn/lesson10/img/lazy/none.gif" data-img="http://js./learn/lesson10/img/lazy/7.jpg" /></li>
    <li><img src="http://js./learn/lesson10/img/lazy/none.gif" data-img="http://js./learn/lesson10/img/lazy/8.jpg" /></li>
    <li><img src="http://js./learn/lesson10/img/lazy/none.gif" data-img="http://js./learn/lesson10/img/lazy/9.jpg" /></li>
    <li><img src="http://js./learn/lesson10/img/lazy/none.gif" data-img="http://js./learn/lesson10/img/lazy/10.jpg" /></li>
    <li><img src="http://js./learn/lesson10/img/lazy/none.gif" data-img="http://js./learn/lesson10/img/lazy/11.jpg" /></li>
    <li><img src="http://js./learn/lesson10/img/lazy/none.gif" data-img="http://js./learn/lesson10/img/lazy/12.jpg" /></li>
    <li><img src="http://js./learn/lesson10/img/lazy/none.gif" data-img="http://js./learn/lesson10/img/lazy/13.jpg" /></li>
    <li><img src="http://js./learn/lesson10/img/lazy/none.gif" data-img="http://js./learn/lesson10/img/lazy/14.jpg" /></li>
    <li><img src="http://js./learn/lesson10/img/lazy/none.gif" data-img="http://js./learn/lesson10/img/lazy/15.jpg" /></li>
    <li><img src="http://js./learn/lesson10/img/lazy/none.gif" data-img="http://js./learn/lesson10/img/lazy/16.jpg" /></li>
    <li><img src="http://js./learn/lesson10/img/lazy/none.gif" data-img="http://js./learn/lesson10/img/lazy/17.jpg" /></li>
    <li><img src="http://js./learn/lesson10/img/lazy/none.gif" data-img="http://js./learn/lesson10/img/lazy/18.jpg" /></li>
    <li><img src="http://js./learn/lesson10/img/lazy/none.gif" data-img="http://js./learn/lesson10/img/lazy/19.jpg" /></li>
    <li><img src="http://js./learn/lesson10/img/lazy/none.gif" data-img="http://js./learn/lesson10/img/lazy/20.jpg" /></li>
    <li><img src="http://js./learn/lesson10/img/lazy/none.gif" data-img="http://js./learn/lesson10/img/lazy/21.jpg" /></li>
    <li><img src="http://js./learn/lesson10/img/lazy/none.gif" data-img="http://js./learn/lesson10/img/lazy/22.jpg" /></li>
    <li><img src="http://js./learn/lesson10/img/lazy/none.gif" data-img="http://js./learn/lesson10/img/lazy/23.jpg" /></li>
    <li><img src="http://js./learn/lesson10/img/lazy/none.gif" data-img="http://js./learn/lesson10/img/lazy/24.jpg" /></li>
    <li><img src="http://js./learn/lesson10/img/lazy/none.gif" data-img="http://js./learn/lesson10/img/lazy/25.jpg" /></li>
    <li><img src="http://js./learn/lesson10/img/lazy/none.gif" data-img="http://js./learn/lesson10/img/lazy/26.jpg" /></li>
    <li><img src="http://js./learn/lesson10/img/lazy/none.gif" data-img="http://js./learn/lesson10/img/lazy/27.jpg" /></li>
    <li><img src="http://js./learn/lesson10/img/lazy/none.gif" data-img="http://js./learn/lesson10/img/lazy/28.jpg" /></li>
    <li><img src="http://js./learn/lesson10/img/lazy/none.gif" data-img="http://js./learn/lesson10/img/lazy/29.jpg" /></li>
    <li><img src="http://js./learn/lesson10/img/lazy/none.gif" data-img="http://js./learn/lesson10/img/lazy/30.jpg" /></li>
</ul>
</body>
</html>

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多