<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<style>
.demo-1 {
column-count: 4;
-moz-column-gap: 1em;
-webkit-column-gap: 1em;
column-gap: 1em;
width: 100%;
margin: 0 auto;
transition: 1s;
}
@media screen and (max-width: 750px) {
.demo-1 {
column-count: 2;
}
}
.item {
padding: 2em;
margin-bottom: 0.5em;
-webkit-column-break-inside: avoid;
break-inside: avoid;
/*防止斷點*/
background: #ccc;
text-align: center;
}
</style>
<body>
<div class="demo-1">
<div class="item">
<div class="item_content content-lar" style="height:100px;"> img</div>
<span>content</span>
</div>
<div class="item">
<div class="item_content content-sma" style="height:150px;"> 2</div>
</div>
<div class="item">
<div class="item_content content-mid" style="height:50px;"> 3</div>
</div>
<div class="item">
<div class="item_content content-sma" style="height:200px;"> 4</div>
</div>
<div class="item">
<div class="item_content content-mid" style="height:60px;"> 5 </div>
</div>
<div class="item">
<div class="item_content content-lar" style="height:90px;"> 6</div>
</div>
<div class="item">
<div class="item_content content-sma"> 7</div>
</div>
<div class="item">
<div class="item_content content-lar" style="height:120px;"> 8</div>
</div>
<div class="item">
<div class="item_content content-lar"> 9</div>
</div>
<div class="item">
<div class="item_content content-sma" style="height:100px;"> 10 </div>
</div>
<div class="item">
<div class="item_content content-mid"> 11 </div>
</div>
<div class="item">
<div class="item_content content-mid" style="height:100px;"> 12</div>
</div>
<div class="item">
<div class="item_content content-lar"> 9</div>
</div>
<div class="item">
<div class="item_content content-sma" style="height:200px;"> 4</div>
</div>
<div class="item">
<div class="item_content content-lar"> 9</div>
</div>
<!-- more items -->
</div>
</body>
<script type="text/javascript">
// 定義瀑布流算法函數(shù)
function fall() {
const minGap = 20; // 最小間距,讓每一列的最小空隙可以自定義瘤睹,避免太過擁擠的情況發(fā)生沽翔。但是,會通過計算得到真實的間距表窘。
const itemWidth = 300; // 每一項的寬度苛秕,即當前每一個圖片容器的寬度颖杏。保證每一列都是等寬不等高的。
const scrollBarWidth = getScrollbarWidth(); // 獲取滾動條的寬度
const pageWidth = window.innerWidth - scrollBarWidth; // 獲取當前頁面的寬度 = window.innerWidth - 滾動條的寬度
const column = Math.floor(pageWidth / (itemWidth + minGap)); // 實際列數(shù)=頁面寬度/(圖片寬度+最小間距)
const gap = (pageWidth - itemWidth * column) / column / 2; // 計算真實間距 = (頁面寬度- 圖片寬度*實際列數(shù))/實際列數(shù)/2
const items = document.querySelectorAll('img'); // 獲取所有的外層元素
const heightArr = []; // 定義一個空數(shù)組政溃,保存最低高度趾访。
// 獲取滾動條的寬度
function getScrollbarWidth() {
const oDiv = document.createElement('div');//創(chuàng)建一個div
// 給div設置樣式。隨便定義寬高董虱,只要能獲取到滾動條就可以
oDiv.style.cssText = `width: 50px;height: 50px;overflow: scroll;`
document.body.appendChild(oDiv);//把div添加到body中
const scrollbarWidth = oDiv.offsetWidth - oDiv.clientWidth;// 使最大寬度和可視寬度相減腹缩,獲得到滾動條寬度。
oDiv.remove();//移除創(chuàng)建的div
return scrollbarWidth;//返回滾動條寬度
}
for (let i = 0; i < items.length; i++) {
// 遍歷所有的外層容器
const height = items[i].offsetHeight;
// 如果當前處在第一行
if (i < column) {
// 直接設置元素距離上部的位置和距離左邊的距離。
items[i].style.cssText = `top: ${gap}px;left: ${(itemWidth + gap) * i + gap}px`;
// 保存當前元素的高度藏鹊。
heightArr.push(height);
} else {
// 不是第一行的話润讥,就進行比對。
let minHeight = heightArr[0]; // 先保存第一項的高度
let minIndex = 0; // 保存第一項的索引值
for (let j = 0; j < heightArr.length; j++) {
// 通過循環(huán)遍歷比對盘寡,拿到最小值和最小值的索引楚殿。
if (minHeight > heightArr[j]) {
minHeight = heightArr[j];
minIndex = j;
}
}
// 通過最小值為當前元素設置top值,通過索引為當前元素設置left值竿痰。
items[i].style.cssText = `top: ${minHeight + gap * 2}px; left: ${(itemWidth + gap) * minIndex + gap}px`;
// 并修改當前索引的高度為當前元素的高度
heightArr[minIndex] = minHeight + gap + height;
}
}
}
// 頁面加載完成調(diào)用一次脆粥。
window.onload = fall;
// 頁面尺寸發(fā)生改變再次調(diào)用。
window.onresize = fall;
</script>
</html>
瀑布流布局
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
- 文/潘曉璐 我一進店門豁陆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來柑爸,“玉大人,你說我怎么就攤上這事盒音”眵ⅲ” “怎么了?”我有些...
- 文/不壞的土叔 我叫張陵祥诽,是天一觀的道長譬圣。 經(jīng)常有香客問我,道長原押,這世上最難降的妖魔是什么? 我笑而不...
- 正文 為了忘掉前任偎血,我火速辦了婚禮诸衔,結果婚禮上,老公的妹妹穿的比我還像新娘颇玷。我一直安慰自己笨农,他們只是感情好,可當我...
- 文/花漫 我一把揭開白布帖渠。 她就那樣靜靜地躺著谒亦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上份招,一...
- 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼十气!你這毒婦竟也來了励背?” 一聲冷哼從身側響起,我...
- 正文 年R本政府宣布嗽上,位于F島的核電站,受9級特大地震影響熄攘,放射性物質(zhì)發(fā)生泄漏兽愤。R本人自食惡果不足惜,卻給世界環(huán)境...
- 文/蒙蒙 一挪圾、第九天 我趴在偏房一處隱蔽的房頂上張望浅萧。 院中可真熱鬧,春花似錦哲思、人聲如沸洼畅。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽帝簇。三九已至徘郭,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間丧肴,已是汗流浹背残揉。 一陣腳步聲響...
推薦閱讀更多精彩內(nèi)容
- 幾個自定義的Layout UICollectionView的強大之處宏胯,就在于各種layout的自定義實現(xiàn)羽嫡,以及它們...
- 1杭棵、實現(xiàn)一個瀑布流布局效果 性能效率上的注意點: 這種布局方式非常適合動態(tài)加載圖片,當滾動條拉到最下面的時候可以通...