美文网首页
瀑布流算法

瀑布流算法

作者: HelloKing | 来源:发表于2018-10-29 15:13 被阅读11次

// 添加插件

$.fn.extend({

waterfall:function(){

// console.log('我自己写的瀑布流插件');

// 步骤1

/*

为了 计算 获取一些 必须知道的值

容器的宽度 .items的 宽度

子元素的宽度 .child().width()

每一行放置的元素个数

计算间距

*/

// 定义$_变量 方便 观察

var  $_this = this;

// 父盒子宽度

var totalWidth =$_this.width();

// 子元素宽度

var itemWidth = $_this.children('.item').width();

// 每一行的个数 4.1  4.9

var colNum =Math.floor(totalWidth / itemWidth);

// 间距 (总宽度 - 个数*子元素宽度)/(个数-1)

var margin = (totalWidth - itemWidth*colNum)/(colNum-1);

// 步骤2

/* 1. 准备一个 数组 数组元素的个数 跟 每一行的个数一直

里面是默认值(比如是10 或者是margin)

2. 循环我们的 所有 .item 子元素

获取子元素的高度

通过我们在步骤1中定义的 数组 获取 最小的值

根据获取的 最小索引值 计算top 以及left

3.修改步骤1中定义的 数组 对应索引的值 即可

*/

// 步骤2.1 准备高度数组

// 高度数组

var heightArr = [];

// 循环为 高度数组 赋值 初始值

for (var i = 0; i < colNum; i++) {

heightArr[i] = margin;

}

// 步骤 2.2 循环子元素 获取数组中最小的索引

// 修改当前循环的元素的 top 以及 left值

// jq中 循环数组的方法

$_this.children('.item').each(function(index, element) {

// console.log(index+'||'+element);

// 获取 当前循环的 子元素高度

var currentHeight = $(element).height();

// 计算 该元素 放在哪个位置

// 先 假设 索引为0的 是最小值

var minIndex = 0;

var minHeight =heightArr[0];

for (var i = 0; i < heightArr.length; i++) {

// 根 我们自己假设的 最小值 进行比较

if (heightArr[i]<minHeight) {

// 替换一下

minHeight = heightArr[i];

minIndex = i;

}

}

// 循环完毕 最小的 高度 以及 最小的 索引值

// 设置给 当前循环的 子元素 即可

// top 高度为 计算出来的 最小高度

// left 左间距为 宽度*索引 +索引*间距

$(element).css({

top:minHeight,

left:minIndex*itemWidth+minIndex*margin

});

// 步骤2.3 修改 步骤1中 创建的 高度数组

// 修改 minIndex 对应的值即可

minHeight+=currentHeight; //加上自己的高度

minHeight+=margin;//为了美观 把间距 加上去

// 赋值给 高度数组即可

heightArr[minIndex]=minHeight;

});

//步骤3

/*

修改 父盒子的 高度 即可

// 获取 高度数组中 最大的值

// 修改父盒子的高度为 计算出来的 最大值即可

*/

//

var maxHeight = heightArr[0];

for (var i = 0; i < heightArr.length; i++) {

if(heightArr[i]>maxHeight){

// 将 更大的值 保存起来

maxHeight = heightArr[i];

}

}

// 循环完毕以后 最大值 就有了

$_this.height(maxHeight);

}

})

相关文章

网友评论

      本文标题:瀑布流算法

      本文链接:https://www.haomeiwen.com/subject/qmvbtqtx.html