瀑布流布局的原理及實現(瀑布流布局是什么)

瀑布流布局簡而言之就是類似瀑布的布局,這么一講大家可能還是不是很明白,來來來,那現在我給大家上一個常見的實例:

瀑布流分為橫向與豎向兩種,用圖說話。

網頁實現圖片的瀑布流布局

瀑布流(橫向)

網頁實現圖片的瀑布流布局

瀑布流(橫向)

相信大家在百度上搜索圖片的時候,網頁圖片的布局就是這樣子的吧,當然還有一種瀑布流形式。

網頁實現圖片的瀑布流布局

瀑布流(縱向)

網頁實現圖片的瀑布流布局

瀑布流(縱向)

今天我們主要說說縱向瀑布流,這也是使用更為廣泛的一種。

縱向瀑布流即多行等寬元素排列,后面的元素依次添加到其后,等寬不等高,根據圖片原比例縮放直至寬度達到我們的要求,依次按照規則放入指定位置。那么規則是什么呢?

當第一排排滿足夠多的等寬圖片時(如下圖情況),自然而然地考慮到之后放置的圖片會往下面排放。

網頁實現圖片的瀑布流布局

那么第六張圖片,放置在什么位置呢?是下圖的位置么?

網頁實現圖片的瀑布流布局

我們通過瀑布流算法實驗得到,后面緊跟的第六張圖片的位置應該是這個位置。

網頁實現圖片的瀑布流布局

為什么呢?

因為放置它之前,這一列的高度為所有列中最小,所以會放置在這個地方。

所以我們知道了,如果再繼續放置下去,第七張圖片應該是這個位置,對嗎?

網頁實現圖片的瀑布流布局

通過瀑布流算法實驗得出位置正確。

看懂這個圖示應該就能理解了瀑布流的原理算法。

網頁實現圖片的瀑布流布局

Js代碼:

var colCount //定義列數

var colHeightArry= [] //定義列高度數組

var imgWidth = $('.waterfall img').outerWidth(true) //單張圖片的寬度

colCount = parseInt($('.waterfall').width()/imgWidth) //計算出列數

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

colHeightArry[i] = 0

}

//[0,0,0]

$('.waterfall img').on('load',function(){

var minValue = colHeightArry[0] //定義最小的高度

var minIndex = 0 //定義最小高度的下標

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

if(colHeightArry[i] < minValue){ //如果最小高度組數中的值小于最小值

minValue = colHeightArry[i] //那么認為最小高度數組中的值是真正的最小值

minIndex = i //最小下標為當前下標

}

}

$(this).css({

left: minIndex * imgWidth,

top: minValue

})

colHeightArry[minIndex] += $(this).outerHeight(true)

})

//當窗口大小重置之后,重新執行

$(window).on('resize',function(){

reset()

})

//當窗口加載完畢,執行瀑布流

$(window).on('load',function(){

reset()

})

//定義reset函數

function reset(){

var colHeightArry= []

colCount = parseInt($('.waterfall').width()/imgWidth)

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

colHeightArry[i] = 0

}

$('.waterfall img').each(function(){

var minValue = colHeightArry[0]

var minIndex = 0

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

if(colHeightArry[i] < minValue){

minValue = colHeightArry[i]

minIndex = i

}

}

$(this).css({

left: minIndex * imgWidth,

top: minValue

})

colHeightArry[minIndex] += $(this).outerHeight(true)

})

}

總結瀑布流布局原理

  • 設置圖片寬度一致
  • 根據瀏覽器寬度以及每列寬度計算出列表個數,列表默認為0
  • 當圖片加載完成,所有圖片依次放置在最小的列數下面
  • 父容器高度取列表數組的最大值

原創文章,作者:mjj,如若轉載,請注明出處:http://www.8874yy.com/2203.html

(0)
上一篇 2022年5月30日 下午4:16
下一篇 2022年5月30日 下午4:19

相關推薦

  • 谷歌 721 理論,教你如何有效分配公司資源?

    怎么叫定戰略?叫定期,阿里每年只有一個固定時間,7月份8月份,會抽出一兩個禮拜認真討論戰略,這個叫定期,不定期討論戰略,那就麻煩了,1月份討論,3月份討論,7月份討論,那你到底還有...

    2022年3月13日
  • 若人散亂心是什么意思?什么是散亂心

    昨日北京第一次下雪,如果還在北京,估計還會有二次雪登高,趁雪景怡人的人到山里看看。只是年復一年,年復一年,又來到了一個新的城市。在享受這種四處遷徙自由的同時,許多因地而動,無法連線...

    2020年12月1日
  • 如何玩轉電商平臺 超詳細的電商平臺運營方案

    電商平臺的運營方案 一、 平臺的定位與總體目標(階段性) 1. 平臺目標 第一階段以建成平臺運營整體框架結構以及完成交易流程為重點,旨在以品質、專業、服務為核心推廣筑巢電商品牌形象...

    2022年9月17日
  • 團隊打造--馬云打造阿里鐵軍背后的三個能力

    我是1949年以后第一個上匯豐全球董事會的,匯豐的使命原來是什么呢,它有點像我們喬家大院里面,喬致庸的使命,貨通天下匯通天下,匯豐英文叫,HongkongShanghaiBanki...

    2022年3月13日
  • 手捧喜帖的那一刻,女人才從舊夢中幡然蘇醒

    分手后,你依然會夢到他。 不是噩夢,卻仍是你們相愛的片斷。 夢中,你們遭遇了海難,他牢牢地牽著你的手,一起逃命。他本可以自己逃命的,可他丟不下你,你們一路跑著,你跌倒,他背著你;你...

    2021年1月7日
  • 守株待兔,才是最好的策略

    今天我們繼續講關于財富你需要升級的第11個核心認知:四域空間 上節課我們講到了四域空間中的:風險域。 風險域是所有區域里最危險的一個,因為在這里,不僅結果不確定,就連結果會是什么你...

    2022年3月23日
  • 抖音運營怎么做 抖音運營的注意事項

    對抖音賬號來說,肯定也需要做好運營工作,但是也要先去了解一下運營工作到底應該怎么做才行,另外還有一些注意事項需要引起重視,我馬上給各位介紹一下。 一、重點關注完播率完播率對流量起決...

    2022年9月14日
  • 如何培養對文字的敏感?怎樣才能源源不斷的找到話題?

    初學寫作的朋友,經常會問一個問題:「如何培養寫作的敏感,每天都能找到話題?」 自從我開始在網絡上寫作,并保持幾年來的持續更新后,我開始刻意訓練自己對世界、生活、自我和寫作這個領域的...

    2021年7月19日
  • 如何寫數據分析報告(數據報告怎么做)

    大家都知道,數據分析報告的輸出是整個業務分析過程的成果,是評定一條業務線的參考依據,既然這么重要那當然要寫好它了。 接下來我就分享我寫數據分析報告的5個步驟,供大家學習參考。 一、...

    2022年5月31日
  • 失戀的自己,搭上旅行更不必

    失戀的時候總是喜歡旅行。去一個陌生的地方,放肆地打扮一下,忘記受傷的自己,忘記那個男人。背負著這個包袱,想用快捷鍵清空記憶。 一個人在旅店的夜,眼淚卻失控般襲來,想忘記的時候才知道...

    2021年1月13日

發表回復

您的電子郵箱地址不會被公開。 必填項已用*標注

亚州毛片,国产乱真实伦一区二区三,女性自慰喷潮AV免费观看,国产一线二线三线视频在线