js实战之-瀑布流

  1 <!DOCTYPE HTML>
  2 <html>
  3 <head>
  4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  5 <title>无标题文档</title>
  6 <style>
  7 * {margin: 0; padding: 0;}
  8 #container {  border: 1px solid red; position: relative; margin: 50px auto 0; zoom:1 }
  9 #container img { position: absolute; }
 10 
 11 #loader { width: 100%; height: 60px; background: url('loader.gif') no-repeat center #FFF; position: fixed; bottom: 0; left: 0; display: none; }
 12 </style>
 13 <script src="jquery-1.9.1.min.js"></script>
 14 <script>
 15 /*
 16 固定列:浮动布局
 17 定位
 18 */
 19 $(function(){
 20     var oBox=$("#container");
 21     
 22     var icell=0;
 23     var imgWidth=200;
 24     var mWidth=10;
 25     var ipage=0;
 26     var zWidth=imgWidth+mWidth;
 27     var sUrl = 'http://www.wookmark.com/api/json/popular?callback=?';
 28     var arrT=[];
 29     var arrL=[];
 30     var iBtn=true;
 31     
 32     setimg();
 33     function  setimg(){
 34          var winW=$(window).innerWidth();
 35          icell=Math.floor(winW/zWidth);
 36          oBox.css("width",icell*zWidth);    
 37 
 38     }
 39     
 40     for(var i=0;i<icell;i++){
 41         arrT[i]=0;    
 42         arrL[i]=zWidth*i;
 43     }
 44     
 45     setData();
 46     
 47     
 48     
 49     $(window).on("scroll",function(){
 50         
 51           var _index=minImg();
 52           var Hi=$(window).scrollTop()+$(window).innerHeight();
 53           if(arrT[_index]+50<Hi){
 54               
 55             setData();  
 56           }
 57 
 58     })
 59     $(window).on("resize",function(){
 60         var iLen=icell;
 61         setimg();
 62         if(iLen==icell){return}
 63         arrT=[];
 64         arrL=[];
 65         for(var i=0;i<icell;i++){
 66             arrT[i]=0;    
 67             arrL[i]=zWidth*i;
 68         }
 69         
 70         oBox.find("img").each(function(){
 71                 var _index=minImg();
 72                  $(this).animate({
 73                       top:arrT[_index],    
 74                       left:arrL[_index]        
 75                  },1000);
 76                 arrT[_index]+=$(this).height()+10;
 77             
 78             
 79         })        
 80                 
 81 
 82     })
 83     
 84     
 85     
 86     
 87     function  setData(){
 88         // alert(1);
 89                if(!iBtn){ return}
 90                  ipage+=1;
 91                  iBtn=false;
 92            
 93                 $.getJSON(sUrl,{page:ipage},function(sdata){
 94                     $('#loader').show();
 95                     
 96                     $.each(sdata,function(index,obj){
 97                             var oImg=$("<img />");
 98                             var iHeight=obj.width*imgWidth/obj.height;
 99                             oImg.css({
100                               imgWidth,    
101                               height:iHeight        
102                             });        
103                             var _index=minImg();
104                             oImg.css({
105                               top:arrT[_index],    
106                               left:arrL[_index]        
107                             });
108                           arrT[_index]+=iHeight+10;        
109                           oBox.append(oImg);
110                           var objImg=new Image();
111                           objImg.onload=function(){
112                               
113                                oImg.attr("src",this.src); 
114                               
115                           }
116                           objImg.src = obj.preview;
117                           
118 
119                          setTimeout(function(){
120                              
121                               $('#loader').hide();
122                         },1000);     
123                           
124                         iBtn=true;
125                         
126                     });
127                         var x=minImg();
128                         var Hi=$(window).scrollTop()+$(window).innerHeight();
129                         if(arrT[x]+50<Hi){
130                                                      
131                             setData(); 
132                             
133                         }
134                     
135                 });    
136                     
137         
138       }
139     
140     function  minImg(){
141         
142         var  v=arrT[0];
143         var _index=0;
144         for(var i=0;i<arrT.length;i++){
145             
146              if(arrT[i]<v){
147                  v=arrT[i];     
148                  _index=i;
149              }
150             
151         }
152         return _index;
153     }
154     
155     
156     
157 })
158 
159 
160 </script>
161 </head>
162 
163 <body>
164     <div id="container"></div>
165     <div id="loader"></div>
166 </body>
167 </html>
一个不敬业的前端攻城狮
原文地址:https://www.cnblogs.com/chaoming/p/3198642.html