日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

浅谈瀑布流

發布時間:2025/3/15 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 浅谈瀑布流 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

瀑布流又稱瀑布流式布局,是比較流行的一種網站頁面布局方式。視覺表現為參差不齊的多欄布局,最早采用此布局的是網站是 Pinterest,后逐漸在國內流行。

瀑布流布局效果

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

那么規則是什么呢?
下面通過圖解來分析一下瀑布流的算法。

圖解瀑布流算法

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

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

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

為什么呢?
因為放置它之前,這一列的高度為所有列中最小,所以會放置在這個地方。
所以我們知道了,如果再繼續放置下去,第七張圖片應該是這個位置,對嗎?

通過瀑布流算法實驗得出位置正確。看懂這個圖示應該就能理解了瀑布流的原理算法。

JS 實現代碼

這里使用了jQuery

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 = 0for(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)})} View Code

?

Demo 演示

瀑布流 Demo 效果

?

總結瀑布流布局原理

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

實戰相關

瀑布流 + 懶加載 實現新聞站
https://github.com/evenyao/waterfall-sinanews

轉載于:https://www.cnblogs.com/evenyao/p/9523226.html

新人創作打卡挑戰賽發博客就能抽獎!定制產品紅包拿不停!

總結

以上是生活随笔為你收集整理的浅谈瀑布流的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。