JavaScript實(shí)現(xiàn)瀑布流布局的代碼分享
前言
不知道大家在線(xiàn)上購(gòu)物的時(shí)候有沒(méi)有發(fā)現(xiàn)到,自己逛起來(lái)根本就停不下來(lái),越往下翻越是覺(jué)得就會(huì)出現(xiàn)需要的東西。這就是很多電商公司都在使用的瀑布流布局,為了更好的留住用戶(hù),給你的感覺(jué)就是下面會(huì)有更精彩的東西,讓你不停地往下滑,一步步走進(jìn)消費(fèi)“陷阱”。如何實(shí)現(xiàn)瀑布流布局,這也是阿里面試的經(jīng)典考題。
如何實(shí)現(xiàn)
思路:將內(nèi)容寬度一致,高度不一致的圖片,從左至右排列,一行內(nèi)容排滿(mǎn)后,下一張就會(huì)按順序排在最短的內(nèi)容后,以此類(lèi)推。
html部分
在頁(yè)面放入20個(gè)box容器(幾張圖片就放幾個(gè)容器),為方便給圖片添加好看的樣式,我在box容器里放了個(gè)box-img容器,再將圖片放入。
<body>
<div id="container">
<div class="box">
<div class="box-img">
<img src="./img1/1 (1).JPG" alt="">
</div>
</div>
<div class="box">
<div class="box-img">
<img src="./img1/1 (2).JPG" alt="">
</div>
</div>
/*此處省多個(gè)box 幾張圖片就放幾個(gè)box容器*/
</body> css部分
* {
margin: 0;
padding: 0;
}
/*讓圖片向左浮動(dòng)*/
.box {
float: left;
}
/*定位*/
.container {
position: relative;
}
/*給圖片容器設(shè)置相同的寬度 邊框 盒子陰影*/
.box-img {
width: 150px;
padding: 5px;
border: 1px solid #ccc;
box-shadow: 0 0 5px #ccc;
}
/*讓圖片與圖片容器寬度相等*/
.box-img img {
width: 100%;
}js部分
我們的目的其實(shí)就是要擺放圖片的位置,先獲取到所有的圖片,當(dāng)?shù)谝慌畔蜃蟾?dòng)擺放好后,我們需要找到在第二排開(kāi)始從誰(shuí)是被需要擺放位置的。那就用屏幕視窗的寬度除以一個(gè)圖片盒子的寬度,向下取整,那就知道第一行能放幾張圖,然后我們操作第num張之后的每一張圖,把它們一一擺放到最矮那一列的位置。
window.onload = function() {
imgLocation('container', 'box')
}
//獲取到所有要擺放的圖片
function imgLocation(parent,content){
var cparent = document.getElementById(parent)
// cparent 下的所有的第一層的子容器 box
var ccontent = getChildElement(cparent,content) //[裝了20個(gè)div]
//找從誰(shuí)開(kāi)始是需要被擺放位置的
var winWidth = document.documentElement.clientWidth //獲取視窗的寬度
var imgWidth = ccontent[0].offsetWidth //獲取圖片盒子的寬度
var num = Math.floor(winWidth / imgWidth) //向下取整
// 操作第 num+1 張圖
var BoxHeightArr = []
for (var i = 0; i < ccontent.length; i++){
// 前num張只要計(jì)算高度
if (i < num) {
BoxHeightArr[i] = ccontent[i].offsetHeight
}else{
//我們要操作的Box
var minHeight = Math.min.apply(null,BoxHeightArr)
var minIndex = BoxHeightArr.indexOf(minHeight)
ccontent[i].style.position = 'absolute'
ccontent[i].style.top = minHeight + 'px'
ccontent[i].style.left = (imgWidth * minIndex) + 'px'
//更新最矮的那一列的高度
BoxHeightArr[minIndex] = BoxHeightArr[minIndex] + ccontent[i].offsetHeight
}
}
} 在外面創(chuàng)建一個(gè)輔助函數(shù),可以幫我們?nèi)〉礁溉萜髦械哪骋粚幼尤萜?/p>
function getChildElement(parent,content){
var contentArr = []
var allContent = parent.getElementsByTagName('*') //[xxxx數(shù)組]
//遍歷allContent 把中其類(lèi)名為 content 的容器都存到contentArr數(shù)組中
for (var i = 0; i < allContent.length; i++){
//當(dāng)前這個(gè)容器的類(lèi)名是否為 content
if (allContent[i].className == content){
contentArr.push(allContent[i])
}
}
return contentArr
}實(shí)現(xiàn)效果圖如下:

瀑布流布局的優(yōu)點(diǎn)
良好的視覺(jué)體驗(yàn) ;參差不齊的排列方式,以及流動(dòng)布局的擴(kuò)展性,打破常規(guī)網(wǎng)站布局排版,用戶(hù)在瀏覽內(nèi)容時(shí)會(huì)有新鮮感,帶來(lái)良好的視覺(jué)體驗(yàn)。
吸引用戶(hù);可以通過(guò)界面展示給用戶(hù)多條數(shù)據(jù),并且讓用戶(hù)有可以向下瀏覽的沖動(dòng)。
適應(yīng)移動(dòng)端;移動(dòng)設(shè)備都偏小,屏幕能顯示的內(nèi)容不會(huì)很多,如果經(jīng)常翻頁(yè)的話(huà)顯得疲勞,使用瀑布流布局用戶(hù)只需要不停滾動(dòng)就能不斷地進(jìn)行瀏覽。
到此這篇關(guān)于JavaScript實(shí)現(xiàn)瀑布流布局的代碼分享的文章就介紹到這了,更多相關(guān)JavaScript瀑布流布局內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
更優(yōu)雅的微信小程序骨架屏實(shí)現(xiàn)詳解
這篇文章主要介紹了更優(yōu)雅的微信小程序骨架屏實(shí)現(xiàn)詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08
javascripit實(shí)現(xiàn)密碼強(qiáng)度檢測(cè)代碼分享
這篇文章主要介紹了javascripit實(shí)現(xiàn)密碼強(qiáng)度檢測(cè),大家參考使用吧2013-12-12
js 賦值包含單引號(hào)雙引號(hào)問(wèn)題的解決方法
這篇文章主要介紹了js賦值包含單引號(hào)雙引號(hào)問(wèn)題的解決方法,需要的朋友可以參考下2014-02-02
非常實(shí)用的js驗(yàn)證框架實(shí)現(xiàn)源碼 附原理方法
這篇文章主要為大家詳細(xì)介紹了一個(gè)非常實(shí)用的js驗(yàn)證框架實(shí)現(xiàn)源碼,并附原理方法,感興趣的小伙伴們可以參考一下2016-06-06
微信小程序uniapp實(shí)現(xiàn)左滑刪除效果(完整代碼)
這篇文章通過(guò)實(shí)例代碼給大家講解了微信小程序uniapp實(shí)現(xiàn)左滑刪除效果,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2021-11-11
javaScript 頁(yè)面自動(dòng)加載事件詳解
本篇文章主要是對(duì)javaScript頁(yè)面自動(dòng)加載事件進(jìn)行了介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2014-02-02
基于JavaScript實(shí)現(xiàn)滑動(dòng)門(mén)效果
這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)滑動(dòng)門(mén)效果的相關(guān)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03
JS根據(jù)key值獲取URL中的參數(shù)值及把URL的參數(shù)轉(zhuǎn)換成json對(duì)象
本篇文章主要圍繞js url 參數(shù)值展開(kāi)話(huà)題,js根據(jù)key值獲取url中的參數(shù)值,接著把url的參數(shù)轉(zhuǎn)換成json,感興趣的朋友一起來(lái)學(xué)習(xí)吧,本文寫(xiě)的不好地方還望多多指出批評(píng)建議2015-08-08
JavaScript實(shí)現(xiàn)聯(lián)動(dòng)菜單特效
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)聯(lián)動(dòng)菜單特效,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-01-01

