loading 加载资源 进度

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" />
    <title>loading</title>
    <script>
        (function(win) {

            if(!window.imgCache){
                window.imgCache={};
                //window.setTimeout(function(){ console.log(window.imgCache) },10000);
            }
            function loader(assetParentDom){
                this.debug=false;
                this.assetBox=document.querySelector(assetParentDom);
                this.imgList=document.querySelectorAll(assetParentDom+' img');
                this.cssList=document.querySelectorAll(assetParentDom+' link');
                this.jsList=document.querySelectorAll(assetParentDom+' script');
                this.loadRecord=[0,0,0];
                this.loaded=0;
                this.length=this.imgList.length+this.cssList.length+this.jsList.length;
                this.onLoading=null;
            }
            loader.prototype.load=function(){
                this.debug && console.log('loader资源总数:'+this.length+'\n img:'+this.imgList.length+', css:'+this.cssList.length+', js:'+this.jsList.length);
                if(this.length==0){ return false;}
                if(this.cssList.length>0){
                    this.loadCss();
                }else if(this.imgList.length>0){
                    this.loadImg();
                }else if(this.jsList.length>0){
                    this.loadJs();
                }
            }
            loader.prototype.loadImg=function(){
                var _this=this, img, url, noCache;
                url=_this.imgList.item(this.loadRecord[0]).getAttribute('assetUrl');
                noCache=_this.imgList.item(this.loadRecord[0]).getAttribute('noCache');
                if(url){
                    img=new Image();
                    img.onload=function(e){
                        _this._calculate(0, e.target.src);
                        window.imgCache[e.target.src.substring(e.target.src.lastIndexOf('/')+1, e.target.src.indexOf('?')>0?e.target.src.indexOf('?'):999)]=e.target;
                    }
                    img.onerror=function(e){ _this._calculate(0, '错误---'+e.target.outerHTML);}
                    img.src= noCache?url+'?r='+Math.random():url;

                }else{
                    _this._calculate(0, '错误---'+_this.imgList.item(i).outerHTML);
                }
            }
            loader.prototype.loadCss=function(){
                var _this=this;
                var url=_this.cssList.item(_this.loadRecord[1]).getAttribute('assetUrl');
                var noCache=_this.cssList.item(_this.loadRecord[1]).getAttribute('noCache');
                if(url && url.indexOf('.css')>0){
                    var mylink=document.createElement('link');
                    mylink.type='text/css';
                    mylink.rel='stylesheet';
                    mylink.href=noCache?url+'?r='+Math.random():url;
                    document.head.appendChild(mylink);
                    setTimeout(function(){
                        _this._calculate(1, mylink.href);
                    },50)
                }else{
                    _this._calculate(1, '错误---'+_this.cssList.item(_this.loadRecord[1]).outerHTML);
                }
            }
            loader.prototype.loadJs=function(){
                var _this=this;
                var url=_this.jsList.item(_this.loadRecord[2]).getAttribute('assetUrl');
                var noCache=_this.jsList.item(_this.loadRecord[2]).getAttribute('noCache');
                if(url && url.indexOf('.js')>0){
                    var myjs=document.createElement('script');
                    myjs.type='text/javascript';
                    myjs.src=noCache?url+'?r='+Math.random():url;
                    myjs.onload=function(){ _this._calculate(2, myjs.src); }
                    myjs.onerror=function(){ _this._calculate(2, '错误---'+_this.jsList.item(_this.loadRecord[2]).outerHTML); }
                    document.head.appendChild(myjs);
                }else{
                    _this._calculate(2, '错误---'+_this.jsList.item(_this.loadRecord[2]).outerHTML);
                }
            }
            loader.prototype._calculate=function(type,url){
                if(type===undefined){ return;}
                this.loadRecord[type]+=1;
                this.loaded+=1;
                this.debug && console.log('loader进度:['+this.loaded+'/'+this.length+'], 载入:'+url);
                var _percent=this.loaded/this.length;
                if(_percent>1)_percent=1;
                typeof(this.onLoading)=='function' && this.onLoading(_percent);
                if(this.loadRecord[1]<this.cssList.length){
                    this.loadCss();
                }else if(this.loadRecord[0]<this.imgList.length){
                    this.loadImg();
                }else if(this.loadRecord[2]<this.jsList.length){
                    this.loadJs();
                }
            }

            win.loader=loader;

        })(window);
    </script>
    <script type="text/javascript">
        window.addEventListener('load', function(){
            var myload = new loader('.asset');
            var loadTxt = document.querySelector('.asset ._load var');
            myload.onLoading=function(p){
                loadTxt.innerText = Math.floor(p*100)+'%';
                if(p<1){ return; }
                //setTimeout(function(){ appBegin(); }, 1000);
            };
            setTimeout(function(){ myload.load(); }, 1000);
        }, false);
    </script>
</head>

<body>

<!--资源loading-->
<div class="asset">
    <div class="_list">
        <link assetUrl="css/main.css" />
        <script assetUrl="js/jquery-2.1.1.min.js" ></script>
        <script assetUrl="js/jquery-transit.min.js" ></script>
        <script assetUrl="js/main.js"></script>
        <img assetUrl="img/loading.png" />
        <img assetUrl="img/dh1.png" />
        <img assetUrl="img/dh1b.jpg" />
        <img assetUrl="img/dh1c.jpg" />
        <img assetUrl="img/dh1d.png" />
        <img assetUrl="img/dh2.jpg" />
        <img assetUrl="img/dh3.jpg" />
        <img assetUrl="img/dh3b.png" />
        <img assetUrl="img/dh3c.png" />
        <img assetUrl="img/dh4.png" />
        <img assetUrl="img/dh4b.png" />
        <img assetUrl="img/dh5.jpg" />
        <img assetUrl="img/dh5b.png" />
        <img assetUrl="img/dh6.jpg" />
        <img assetUrl="img/dh7.png" />
        <img assetUrl="img/dh7b.png" />
        <img assetUrl="img/dh8.jpg" />
        <img assetUrl="img/dh8b.png" />
        <img assetUrl="img/ico.png" />
        <img assetUrl="img/s2-1.gif" />
        <img assetUrl="img/s2-2.gif" />
        <img assetUrl="img/s2-3.png" />
        <img assetUrl="img/s2-input.png" />
        <img assetUrl="img/s2-packet.png" />
        <img assetUrl="img/s3-head.jpg" />
        <img assetUrl="img/s4-1.jpg" />
        <img assetUrl="img/s4-2.png" />
        <img assetUrl="img/s4-3.png" />
        <img assetUrl="img/s4-4.png" />
        <img assetUrl="img/user.jpg" />
        <img assetUrl="img/user_prev.jpg" />
        <img assetUrl="img/user1.jpg" />
        <img assetUrl="img/user2.jpg" />
        <img assetUrl="img/user3.jpg" />
        <img assetUrl="img/hand.png" />
    </div>
    <div class="_load">
        <var>0%</var>
    </div>
</div>
</body>
</html>

  

posted @ 2017-05-26 16:20  xiangcy  阅读(206)  评论(0编辑  收藏  举报