本身封装的瀑布流插件,含最细致解释,简朴易懂。

基于jquery的插件fn相当于prototype,下面最先封装。

$.fn.waterFall=function (option) {   //option  用户传过来的{gap:15}

    var defaults = {gap:20} //默认值

    defaults = $.extend(defaults,option);  //假如用户传参数,以用户为准兼并

    var _this = $(this); //_this就是最父级,装载图片和笔墨的盒子

    var allItem = _this.children('.item');  //猎取父级下每个的 元素

    var itemWidth = allItem.width(); //猎取每个item的宽度

    var count = Math.floor(_this.width()/(itemWidth+defaults.gap)); //向下取整,算出每一行最多可放的列数

    var arr = []; //建立一个空数组,轻易存储每一列的高度

    allItem.each(function (index,ele) {  //遍历每个item
        if(index<count){  //假如不够占满一列
            $(ele).css({  //遍历一切的元素 给每一图片设置坐标值
                top:0,
                left:(itemWidth+defaults.gap)*index+'px'  //一切元素的left坐标 left= (item的宽度+defaults.gap)* index (列数-1)
            })
            arr[index] = $(ele).height()
        }else {  //假如有多行
            // 第二行以下 增加的规律:找出高度最小的列,往这个背面追加图片
            var minHeight = arr[0]; //最小值
            var minkey = 0;  //纪录最小的高度地点的列数
            var i =0,l=arr.length;
            for(;i<l;i++){
                if(minHeight>arr[i]){
                    minHeight=arr[i];
                    minkey = i
                }
            }

            var height = $(ele).height()
            $(ele).css({
                'top':minHeight+defaults.gap+'px',
                'left':minkey*(itemWidth+defaults.gap)+'px' //从第二行最先最小的高度
            })

            //动态更新最小列的高度
            arr[minkey]+=height+defaults.gap
        }
    })

    //算出一切列的高度,给外层父元素加上。

    var maxHeight = arr[0];

    for(var i =0;i<arr.length;i++){
        if(maxHeight<arr[i]){
            maxHeight=arr[i]
        }
    }

    _this.height(maxHeight)
}

下面挪用演示:

dom模板:

<div class="wrapper">
      <div class="items">
         <!-- 此处请多个item -->
          <div class="item">
              <img src="./images/1.jpg" alt="">
              <p>花非花,雾非雾,半夜来,天明去,来如春梦不多时。</p>
          </div>
      </div>
  </div>    
  

js部份:

$('.items').waterFall({gap:15});      
    原文作者:ivyzhang
    原文地址: https://segmentfault.com/a/1190000013305821
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞