jQuery实现瀑布流的简单Demo

一、Html布局
<div id="main">
    <div class="box">
      <div class="pic">
        ![](images.jpg)
      </div>
    </div>
    <div class="box">
      <div class="pic">
        ![](mingo.jpg)
      </div>
    </div>
    <div class="box">
      <div class="pic">
        ![](ace.jpg)
      </div>
    </div>
    <div class="box">
      <div class="pic">
        ![](images.jpg)
      </div>
    </div>
    <div class="box">
      <div class="pic">
        ![](mingo.jpg)
      </div>
    </div>
    <div class="box">
      <div class="pic">
        ![](ace.jpg)
      </div>
    </div>
    <div class="box">
      <div class="pic">
        ![](mingo.jpg)
      </div>
    </div>
    <div class="box">
      <div class="pic">
        ![](ace.jpg)
      </div>
    </div>
  </div>
二、Css样式
<style>
  *{
    margin:0;
    padding: 0;
  }
  #main{
    position: relative;
  }
  .box{
    padding: 15px 0 0 15px;
    float: left;
  }
  .pic{
    padding: 10px;
    border: 1px solid #ccc;
    border-radius: 5px;
    box-shadow:0 0 5px #ccc;
  }
  .pic img{
    width: 320px;
    height: auto;
  }
</style>
三、Js部分
$(window).on('load',function(){
    waterfall();
    $(window).on('scroll',function(){
      var dataInt = {"data":[{"src":"images.jpg"},{"src":"ace.jpg"},{"src":"mingo.jpg"}]};
      if(checkScrollSide){
        $.each(dataInt.data,function(key,val){
          var oBox = $('<div>').addClass('box').appendTo($('#main'));
          var oPic = $('<div>').addClass('pic').appendTo($(oBox));
          $('<img>').attr("src",$(val).attr('src')).appendTo($(oPic));
        })
        waterfall();
      }
    })
  })
  function waterfall(){
    var $boxs = $("#main>div");//找到main下面的图片盒子
    var w = $boxs.eq(0).outerWidth();//图片盒子宽
    var cols = Math.floor($(window).width()/w);//列数
    $("main").width(w*cols).css("margin","0 auto");
    var hArr = [];
    $boxs.each(function(index,val) {
      console.log(val)
      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);//获取高度最低的图片盒子的索引值
          $value = $(val);//将Dom对象转成jQuery对象
          $value.css({
            'position':'absolute',
            'top':minH+'px',
            'left':minHIndex*w + 'px'
          })
          hArr[minHIndex] += $boxs.eq(index).outerHeight();
        }
    });
  }
  function checkScrollSide(){
    var $lastBox = $("#main>div").last();
    var laseBoxDis = $lastBox.offset().top+Math.floor($lastBox.outerHeight()/2);
    var scrollTop = $(window).scrollTop();
    var documentH = $(window).height();
    return (lastBoxDis < scrollTop+documentH)?true:false;
  }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 14,686评论 1 92
  • 一:在制作一个Web应用或Web站点的过程中,你是如何考虑他的UI、安全性、高性能、SEO、可维护性以及技术因素的...
    Arno_z阅读 4,997评论 0 1
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,659评论 25 709
  • 很多时候“优秀”对我们来说就是一个抽象的概念,没有一个人知道它的准则,可是我们又无比的渴望得到它。 ...
    zaki1111阅读 1,930评论 0 0
  • 公司要装修,但是装修方案来回折腾了快半个月,换了4次设计方案,总感觉哪里不对劲,没找到那种让自己眼前一亮,又愿意静...
    张皓源阅读 2,642评论 0 0