瀑布流佈局
這是html,首先先定義一個容器ct,裡面的div模擬照片,每張照片的寬度一樣,高度不一樣
<!DOCTYPE html>
<html>
<head>
<script src="//code.jquery.com/jquery-1.9.1.min.js"></script>
<meta charset="utf-8">
<title>JS Bin</title>
</head>
<body>
<div class="ct">
<div class="item h1">1</div>
<div class="item h2">2</div>
<div class="item h3">3</div>
<div class="item h2">4</div>
<div class="item h1">5</div>
<div class="item h3">6</div>
<div class="item h2">7</div>
<div class="item h2">8</div>
<div class="item h3">9</div>
<div class="item h1">10</div>
<div class="item h1">11</div>
<div class="item h2">12</div>
<div class="item h2">13</div>
<div class="item h1">14</div>
<div class="item h2">15</div>
</div>
</body>
</html>
function waterFull() {
var $ctWidth = $('.ct').width(), //獲取容器寬度
$nodeWidth = $('.item').width(), //獲取每個節點寬度
colLength = parseInt($ctWidth / $nodeWidth), //獲取頁面每一行數量
itemArr = []; //初始化陣列
for (var i = 0; i < colLength; i++) {
itemArr[i] = 0; //遍利陣列
}
$('.item').each(function() {
var minValue = Math.min.apply(null, itemArr); //獲取最小值
var minIndex = itemArr.indexOf(minValue); //獲取最小的索引值
$(this).css({ //定義位置
top: itemArr[minIndex], //
left: $(this).outerWidth(true) * minIndex
});
itemArr[minIndex] += $(this).outerHeight(true);
});
}
1、定義好瀑布流函式,
2、然後獲取容器的寬度,和每個節點的寬度,因為我們要得到容器裡面有幾列,初始化陣列,讓item為0
3、遍歷節點陣列
4、通過Math.min.apply(null, itemArr)獲取到最小值,和最小值的下標
5、最上面開始擺放最小值的下標對應的值,往左偏移的距離是最小的那個的寬度
6、陣列的最小值的高度變化
最後還可以優化下程式碼,將程式碼進行封裝
var Render = (function () {
function init() {
waterFull();
$(window).resize(function () { //視窗尺寸每次變化,執行一次瀑布流
waterFull();
});
}
function waterFull() {
var $ctWidth = $('.ct').width(),//獲取容器寬度
$nodeWidth = $('.item').width(),//獲取每個節點寬度
colLength = parseInt($ctWidth / $nodeWidth),//獲取頁面每一行數量
itemArr = [];//初始化陣列
for (var i = 0; i < colLength; i++) {
itemArr[i] = 0;//便利陣列
}
$('.item').each(function () {
var minValue = Math.min.apply(null, itemArr);//獲取最小值
var minIndex = itemArr.indexOf(minValue);//獲取最小的索引值
$(this).css({//定義位置
top: itemArr[minIndex],//
left: $(this).outerWidth(true) * minIndex
});
itemArr[minIndex] += $(this).outerHeight(true);
});
}
return {
init: init
};
})();
Render.init();
相關文章
- 原生 js 實現瀑布流佈局、React 版本的瀑布流佈局元件JSReact元件
- 瀑布流佈局淺析
- jQuery實現瀑布流佈局jQuery
- Bootstrap實戰 - 瀑布流佈局boot
- 淺析瀑布流佈局原理
- 網頁的瀑布流佈局網頁
- CSS3 column 瀑布流佈局CSSS3
- jQuery瀑布流佈局程式碼例項jQuery
- 瀑布流佈局實現程式碼詳解
- 談談實現瀑布流佈局的幾種思路
- ionic3實戰-隨機佈局瀑布流實現隨機
- CSS3實現瀑布流佈局(display: flex/column-coCSSS3Flex
- css3實現的瀑布流佈局程式碼例項CSSS3
- UIColletionView瀑布流佈局實現思路以及封裝的實現UIView封裝
- AJAX+json+jquery實現預載入瀑布流佈局JSONjQuery
- 原生js實現圖片瀑布流佈局,註釋超詳細JS
- java:佈局方法(流佈局)Java
- Android ListView功能擴充套件,實現高效能的瀑布流佈局AndroidView套件
- 淺談瀑布流
- javascript瀑布流效果JavaScript
- vue實現瀑布流Vue
- 卡片瀑布流實現
- css實現瀑布流CSS
- UICollectionView 瀑布流的使用UIView
- [開發教程]第6講:Bootstrap巢狀佈局與流動佈局boot巢狀
- iOS瀑布流初體驗iOS
- CSS 文件流技巧,讓佈局更簡單CSS
- 使用 yogaKit 實現一個資訊流佈局
- CSS columns多列布局瀑布流CSS
- 【PM】關於敏捷,瀑布流,文件敏捷
- 瀑布流元件初探-Vue.js元件Vue.js
- CSS佈局 --- 居中佈局CSS
- css佈局-float佈局CSS
- 頁面白屏與瀑布流分析方法
- 居中佈局、三欄佈局
- qt 佈局---表單佈局QT
- flex佈局(彈性佈局)Flex
- 佈局技巧:合併佈局