瀑布流JQ

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>瀑布流没有完成jq</title>
</head>


<style type="text/css">
 *{margin:0; padding:0; margin:0 auto;}
 #main{ position:relative;}
.box{ padding:15px 0 0 10px; float:left; display:inline; }
.pic { padding:10px; border:1px solid #ccc; border-radius:5px; box-shadow:0 0 2px #ccc; }
.pic img{ width:165px; height:auto;}
</style>
<body>
<div id='jz'>加载</div>

<div id="main">
  
  <div class="box">
      <div class="pic">
        <img src="http://img.hb.aicdn.com/fb083f6baea7c9ed0d2cce4bd3846b7f8fc2bdc71886e-Fon7KQ_sq320" />
     </div>
  </div>
  <div class="box">
      <div class="pic">
        <img src="http://www.baidu.com/img/baidu_jgylogo3.gif" />
     </div>
  </div>
  
    <div class="box">
      <div class="pic">
        <img src="http://img.hb.aicdn.com/fb083f6baea7c9ed0d2cce4bd3846b7f8fc2bdc71886e-Fon7KQ_sq320" />
     </div>
  </div>
  
    <div class="box">
      <div class="pic">
        <img src="https://ss1.baidu.com/6ONXsjip0QIZ8tyhnq/it/u=2276790136,2981566643&fm=58" />
     </div>
  </div>
  
    <div class="box">
      <div class="pic">
        <img src="https://ss0.baidu.com/73x1bjeh1BF3odCf/it/u=2413634062,3211494602&fm=96&s=E53876DA8E21791562B84C5A030040D7" />
     </div>
  </div>
  
    <div class="box">
      <div class="pic">
        <img src="http://img02.taobaocdn.com/bao/uploaded/i2/TB1VhbGGXXXXXaxXpXXXXXXXXXX_!!0-item_pic.jpg_80x80.jpg" />
     </div>
  </div>
  
    <div class="box">
      <div class="pic">
        <img src="http://static.17shihui.cn/17shihui/w1.1.50/image/weixin.png?static_version=2" />
     </div>
  </div> 
  
  <div class="box">
      <div class="pic">
        <img src="https://ss1.baidu.com/6ONXsjip0QIZ8tyhnq/it/u=2276790136,2981566643&fm=58" />
     </div>
  </div>
   
    <div class="box">
      <div class="pic">
        <img src="http://img.hb.aicdn.com/fb083f6baea7c9ed0d2cce4bd3846b7f8fc2bdc71886e-Fon7KQ_sq320" />
     </div>
    </div>
  
   <div class="box">
      <div class="pic">
        <img src="http://ubmcmm.baidustatic.com/media/v1/0f000DH992eKAi22Lq-JVs.jpg" />
     </div>
  </div>
  
   <div class="box">
      <div class="pic">
        <img src="https://ss0.baidu.com/73F1bjeh1BF3odCf/it/u=4282994204,2464365452&fm=96&s=29828C57C21E21CE1D3408290300E053" />
     </div>
  </div>
  
    <div class="box">
      <div class="pic">
        <img src="http://img.hb.aicdn.com/fb083f6baea7c9ed0d2cce4bd3846b7f8fc2bdc71886e-Fon7KQ_sq320" />
     </div>
  </div>
 

<div class="box">
      <div class="pic">
        <img src="http://gd3.alicdn.com/bao/uploaded/i3/TB1QENsGpXXXXXDXXXXXXXXXXXX_!!0-item_pic.jpg_220x220.jpg" />
     </div>
  </div>
  
     <div class="box">
      <div class="pic">
        <img src="http://img.hb.aicdn.com/fb083f6baea7c9ed0d2cce4bd3846b7f8fc2bdc71886e-Fon7KQ_sq320" />
     </div>
  </div>

  
  
    <div class="box">
      <div class="pic">
        <img src="http://img3.shijue.cvidea.cn/tf/130530/2283083/52ae71293dfae9b500000005.JPEG" />
     </div>
  </div>
   <div class="box">
      <div class="pic">
        <img src="http://img.hb.aicdn.com/fb083f6baea7c9ed0d2cce4bd3846b7f8fc2bdc71886e-Fon7KQ_sq320" />
     </div>
  </div>
  <div class="box">
      <div class="pic">
        <img src="http://www.baidu.com/img/baidu_jgylogo3.gif" />
     </div>
  </div>
  
    <div class="box">
      <div class="pic">
        <img src="http://img.hb.aicdn.com/fb083f6baea7c9ed0d2cce4bd3846b7f8fc2bdc71886e-Fon7KQ_sq320" />
     </div>
  </div>
  
    <div class="box">
      <div class="pic">
        <img src="https://ss1.baidu.com/6ONXsjip0QIZ8tyhnq/it/u=2276790136,2981566643&fm=58" />
     </div>
  </div>
  
    <div class="box">
      <div class="pic">
        <img src="https://ss0.baidu.com/73x1bjeh1BF3odCf/it/u=2413634062,3211494602&fm=96&s=E53876DA8E21791562B84C5A030040D7" />
     </div>
  </div>
  
    <div class="box">
      <div class="pic">
        <img src="http://img02.taobaocdn.com/bao/uploaded/i2/TB1VhbGGXXXXXaxXpXXXXXXXXXX_!!0-item_pic.jpg_80x80.jpg" />
     </div>
  </div>
  
    <div class="box">
      <div class="pic">
        <img src="http://static.17shihui.cn/17shihui/w1.1.50/image/weixin.png?static_version=2" />
     </div>
  </div> 
  
  <div class="box">
      <div class="pic">
        <img src="https://ss1.baidu.com/6ONXsjip0QIZ8tyhnq/it/u=2276790136,2981566643&fm=58" />
     </div>
  </div>
   
    <div class="box">
      <div class="pic">
        <img src="http://img.hb.aicdn.com/fb083f6baea7c9ed0d2cce4bd3846b7f8fc2bdc71886e-Fon7KQ_sq320" />
     </div>
    </div>
  
   <div class="box">
      <div class="pic">
        <img src="http://ubmcmm.baidustatic.com/media/v1/0f000DH992eKAi22Lq-JVs.jpg" />
     </div>
  </div>
  
   <div class="box">
      <div class="pic">
        <img src="https://ss0.baidu.com/73F1bjeh1BF3odCf/it/u=4282994204,2464365452&fm=96&s=29828C57C21E21CE1D3408290300E053" />
     </div>
  </div>
  
    <div class="box">
      <div class="pic">
        <img src="http://img.hb.aicdn.com/fb083f6baea7c9ed0d2cce4bd3846b7f8fc2bdc71886e-Fon7KQ_sq320" />
     </div>
  </div>
 

<div class="box">
      <div class="pic">
        <img src="http://gd3.alicdn.com/bao/uploaded/i3/TB1QENsGpXXXXXDXXXXXXXXXXXX_!!0-item_pic.jpg_220x220.jpg" />
     </div>
  </div>
  
     <div class="box">
      <div class="pic">
        <img src="http://img.hb.aicdn.com/fb083f6baea7c9ed0d2cce4bd3846b7f8fc2bdc71886e-Fon7KQ_sq320" />
     </div>
  </div>

  
  
    <div class="box">
      <div class="pic">
        <img src="http://img3.shijue.cvidea.cn/tf/130530/2283083/52ae71293dfae9b500000005.JPEG" />
     </div>
  </div>

  
</div>

</body>
</html>
<script src="js/jquery-1.11.1.min.js"></script>
<script language="JavaScript" type="text/javascript">
/*
  1、页面加载时 执行 waterfall 方法;
  2、写waterfall 方法,里面有两个参数 父Id 子CLSS名。
  3、waterfall 里面的步骤: 
     获取里面的要传的ID ,获取这个ID下面的 所以要CLASS元素,此时要写 getByClass 方法
     
     计算可以区, 显示多少列,: A ;一个CLASS 的宽度, B 可以区别的宽度, 父ID的总宽度: A*B 
  4'   下面是计算第一列中高度最小的那个元素,然后把要添加的那个元素添加到最小元素下面。 用FOR , index 获取当前元素的index值方法
   此时,页面显示排版正常了, 下面来是, 页面载时, 自动加载进来数据。  
       获取 数组中,最小的值 
   5、window.onscroll 绑定方法, 
   6、 checkScrollsilde 方法,用来计算当前最后一个元素的,高度,是否小于 滚动条的高度, 如果是, 则加载新数据。
  
*/


$(window).on("load",function(){
    waterfall(); // 页面加载时, 执行此方法

    $(window).on('scroll',function(){
         if(checkScrollslide){
             //遍历加载开始
                var dataInt={"data":[{"src":"1.jpg"},{"src":"2.jpg"},{"src":"3.jpg"},{"src":"4.jpg"}]};
                 $.each(dataInt.data,function(key,value){
                     console.log(value)
                    //alert(  $(value).attr('src'))
                        var oDiv=$("<div>").addClass("box").appendTo($("#main"));
                        var oPic=$("<div>").addClass("pic").appendTo($(oDiv));
                        $("<img>").appendTo($(oPic)).attr('src','img/'+$(value).attr('src'))
                           
                    })
                    waterfall();     // 遍历出来的元素重新加载样式,
             }
        
        })
})

/*
waterfall   方法: 
1、 获取父元素下的 元素 box
2 计算一个元素的宽度。
3、让算可视区 显示几列
4、给父元素添加 总宽度 居中。
从第二列开始, 重新布局:
5、 遍历第一列中 最小的高度,  把从第二列中的第一个,放到第一列中最小的那个下面, 相对定位那。   

*/
function waterfall(){
    var $boxs=$("#main>div");
    var w=$boxs.eq(0).outerWidth();
    var cols=Math.floor($(window).width()/w);
        $("#main").width(w*cols).css('margin','0 auto');
        
/*  遍历子元素 index 索引 value 值;
     1、计算一个元素的高度,
     2、 如果是第一列的元素,而放到指定的数组中,
     3、如果不是第一列的元素,则给加上样式。、
     4、 加上的样式是: 高度,相对定位的属性,LEFT值 , 
     5、 要加的高度的值:当前数组中的最小值 , 因为这个数组中存的元素的高度,
     5、LEFT:  当前元素的 宽度*当前元素的缩索值;
     7、加完一个元素后, 数组中的高度重新重计算, 当前列的高度。重新放入数组中,
*/
        
    var hArr=[]; 
    $boxs.each(function(index,value){
        var h=$boxs.eq(index).outerHeight();
        if(index<cols){
            hArr[index]=h;  // 把高度放到 数组中内
            }else{
                var minH=Math.min.apply(null,hArr);  //求数组中最小的值 
                var minHindex=$.inArray(minH, hArr);// 最小值在数组中的索引
                    console.log(value);  // dom  不能用JQ对像,
                $(value).css({
                    'position':"absolute",
                    'top':minH+'px',
                    'left':minHindex*w+'px',
                    })
                    
                    hArr[minHindex]+=$boxs.eq(index).outerHeight();
                }
        })
}

/*
  checkScrollslide 函数 计算滚动条到底部时,此时要加载新的数据过来。
  1、 获取元素的最后一个元素,
  2、 计算最后的一个元素的高度, 和当前元素的高度的一半的  和。
  3、滚动条的滚出去的高度,
  4、 可视区的高度,
  5、 return 下
  
*/

function checkScrollslide(){
    var $lastBox=$("#main>div").last();
    var lastBoxDis=$lastBox.offset().top()+Math.floor($lastBox.outerHeight()/2);  
    var scrollTop=$(window).scrollTop();
    var documentH=$(window).height();
    
    return (lastBoxDis<scrollTop+documentH)? true :false;
    
    
}


</script>
View Code
原文地址:https://www.cnblogs.com/yjhua/p/4616769.html