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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

瀑布流布局浅析+常用插件介绍(转改编)

發(fā)布時間:2023/12/18 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 瀑布流布局浅析+常用插件介绍(转改编) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

http://ued.taobao.com/blog/2011/09/14/waterfall/

“瀑布流布局”隨著pinterest網(wǎng)的流行而出名,現(xiàn)在國內(nèi)使用這種風(fēng)格布局的網(wǎng)站也越來越多,比如說Mark之,蘑菇街,點(diǎn)點(diǎn)網(wǎng),哇哦等等。

如果你經(jīng)常網(wǎng)上沖浪,這樣參差不齊的多欄布局,是不是很眼熟啊?

類似的布局,似乎一夜之間出現(xiàn)在國內(nèi)外大大小小的網(wǎng)站上,比如 Pinterest (貌似是最早使用這種布局的網(wǎng)站了),Mark之,蘑菇街,點(diǎn)點(diǎn)網(wǎng),以及淘寶最新上線的“哇哦” 等等,倒是很流行哈~ 在淘寶即將上線的眾多產(chǎn)品中,你還會大量看到這樣的形式呢。

這種布局適合于小數(shù)據(jù)塊,每個數(shù)據(jù)塊內(nèi)容相近且沒有側(cè)重。通常,隨著頁面滾動條向下滾動,這種布局還會不斷加載數(shù)據(jù)塊并附加至當(dāng)前尾部。所以,我們給這樣的布局起了一個形象的名字 — 瀑布流式布局

幾種實現(xiàn)方式

隨著越來越多設(shè)計師愛用這種布局,我們作為前端,要盡可能滿足視覺/交互設(shè)計師的需求。所以,我們整理了下這種布局的幾種實現(xiàn)方式,有三種:

1) 傳統(tǒng)多列浮動。即 蘑菇街和哇哦 采用的方式,如下圖所示:

  • 各列固定寬度,并且左浮動;
  • 一列中的數(shù)據(jù)塊為一組,列中的每個數(shù)據(jù)塊依次排列即可;
  • 更多數(shù)據(jù)加載時,需要分別插入到不同的列上;
  • 線上例子。

優(yōu)點(diǎn):

  • 布局簡單,應(yīng)該說沒啥特別的難點(diǎn);
  • 不用明確知道數(shù)據(jù)塊高度,當(dāng)數(shù)據(jù)塊中有圖片時,就不需要指定圖片高度。

缺點(diǎn):

  • 列數(shù)固定,擴(kuò)展不易,當(dāng)瀏覽器窗口大小變化時,只能固定的x列,如果要添加一列,很難調(diào)整數(shù)據(jù)塊的排列;
  • 滾動加載更多數(shù)據(jù)時,還要指定插入到第幾列中,還是不方便。

2) CSS3 定義。W3C 中有講述關(guān)于多列布局的文檔,排列出來的樣子:

  • 由 chrome/ff 瀏覽器直接渲染出來,可以指定容器的列個數(shù),列間距,列中間邊框,列寬度來實現(xiàn);
#container {-webkit-column-count: 5;/*-webkit-column-gap: 10px;-webkit-column-rule: 5px solid #333;-webkit-column-width: 210px;*/-moz-column-count: 5;/*-moz-column-gap: 20px;-moz-column-rule: 5px solid #333;-moz-column-width: 210px;*/column-count: 5;/*column-gap: 10px;column-rule: 5px solid #333;column-width: 210px;*/}
  • column-count 為列數(shù); column-gap 為每列間隔距離; column-rule 為間隔邊線大小; column-width 為每列寬度; 當(dāng)只設(shè)置 column-width 時,瀏覽器窗口小于一列寬度時,列中內(nèi)容自動隱藏; 當(dāng)只設(shè)置 column-count 時,平均計算每列寬度,列內(nèi)內(nèi)容超出則隱藏; 都設(shè)了 column-count 和column-width,瀏覽器會根據(jù) count 計算寬度和 width 比較,取大的那個值作為每列寬度,然后當(dāng)窗口縮小時,width 的值為每列最小寬度。這邊其實很簡單,簡易自己嘗試下,詳細(xì)可參考 https://developer.mozilla.org/en/CSS3_Columns 中的說明。
  • 線上例子。

優(yōu)點(diǎn):

  • 直接 CSS 定義,最方便了;
  • 擴(kuò)展方便,直接往容器里添加內(nèi)容即可。

缺點(diǎn):

  • 只有高級瀏覽器中才能使用;
  • 還有一個缺點(diǎn),他的數(shù)據(jù)塊排列是從上到下排列到一定高度后,再把剩余元素依次添加到下一列,這個本質(zhì)上就不一樣了;
  • 鑒于這兩個主要缺點(diǎn),注定了該方法只能局限于高端瀏覽器,而且,更適合于文字多欄排列。

3) 絕對定位。即 Pinterest ,Mark之,KISSY 采用的方式:

  • 可謂是最優(yōu)的一種方案,方便添加數(shù)據(jù)內(nèi)容,窗口變化,列數(shù)/數(shù)據(jù)塊都會自動調(diào)整;
  • 線上例子。

缺點(diǎn):

  • 需要實現(xiàn)知道數(shù)據(jù)塊高度,如果其中包含圖片,需要知道圖片高度;
  • JS 動態(tài)計算數(shù)據(jù)塊位置,當(dāng)窗口縮放頻繁,可能會狂耗性能。

KISSY.Waterfall 實現(xiàn)思路

KISSY 的 Waterfall 組件主要包含兩個部分,一個是對現(xiàn)有數(shù)據(jù)塊進(jìn)行排列計算各自所在的位置; 二是下拉滾動時,觸發(fā)加載數(shù)據(jù)操作,并把數(shù)據(jù)添加到目標(biāo)容器中。

1) 數(shù)據(jù)塊排列,算法步驟簡述下:

  • 初始化時,對容器中已有數(shù)據(jù)塊元素進(jìn)行第一次計算,需要用戶給定: a,容器元素 — 以此獲取容器總寬度; b,列寬度; c,最小列數(shù);?最終列數(shù)取的是容器寬度/列寬度和最小列數(shù)的最大值,這樣保證了,當(dāng)窗口很小時,仍然出現(xiàn)最小列數(shù)的數(shù)據(jù);
  • 獲得列數(shù)后,需要保存每個列的當(dāng)前高度,這樣在添加每個數(shù)據(jù)塊時,才知道起始高度是多少;
  • 依次取容器中的所有數(shù)據(jù)塊,先尋找當(dāng)前高度最小的某列,之后根據(jù)列序號,確定數(shù)據(jù)塊的left,top值,left 為所在列的序號乘以列寬,top 為所在列的當(dāng)前高度,最后更新所在列的當(dāng)前高度加上這個數(shù)據(jù)塊元素的高度,至此,插入一個元素結(jié)束;
  • 當(dāng)所有元素插入完畢后,調(diào)整容器的高度為各列最大的高度值,結(jié)束依次調(diào)整;
  • 性能效率上的注意點(diǎn): a,如果當(dāng)前正在調(diào)整中,又觸發(fā)了 resize 事件,需要將上次調(diào)整暫停后執(zhí)行這次調(diào)整(見 timedChunk 函數(shù)); b,resize 觸發(fā)會很頻繁,可以將回調(diào)函數(shù)緩存一段時候后執(zhí)行,即當(dāng)這段時間內(nèi)多次觸發(fā)了resize事件,但回調(diào)函數(shù)只會執(zhí)行一次(見 S.buffer 函數(shù))
  • 感興趣的可以參見源碼。

2) 異步加載數(shù)據(jù),前面講的是如何對容器中已有元素進(jìn)行排列,但很多情況下,還需要不斷加載新數(shù)據(jù)塊,為此專門設(shè)計了一個獨(dú)立的模塊 KISSY.Waterfall.Loader,其實這個功能就更簡單了,僅包含兩個步驟:

  • 綁定滾動事件,并確定預(yù)加載線高度值,即滾動到哪個高度后,需要去加載數(shù)據(jù),其實這個就是列的最小高度值,這樣當(dāng)前滾動值和最小高度值比較一下即可判斷出來,是否要觸發(fā)加載數(shù)據(jù);
  • 加載數(shù)據(jù),為了不對數(shù)據(jù)源做太多限制,完全由使用者自己決定數(shù)據(jù)源從哪邊獲取和其格式,這樣更好的方便用戶使用。為此,該組件只提供一個 load(success,end) 接口,怎樣load 由用戶自己去定義,而其中的 success/end,分別給出如何添加新數(shù)據(jù)(suceess 即同 addItems)/如何停止加載的接口。這樣真是太方便了~~
  • 感興趣的可以參見源碼。

KISSY.Waterfall 示例和文檔

看到這邊,是不是很想試用一下~~ 嗯嗯,這里給出一些相關(guān)學(xué)習(xí)資料和示例,以供參考:

  • Waterfall API 文檔,相關(guān)構(gòu)造器,配置項,方法都在這里;
  • 示例,包含靜態(tài)和動態(tài)兩種。

=====================================================

制作瀑布流布局的優(yōu)秀插件

首先簡單的向大家推薦幾款制作瀑布流的jQuery插件,這些插件能幫助大家輕松的實現(xiàn)類似于pinterest的布局效果:

1.Masonry

Masonry是一個動態(tài)的網(wǎng)格布局插件。每個元素水平方向都采用全float布局,但在垂直方向使用絕對定位來控制元素的位置,猶如徹墻一樣,能做到見縫插針。

2.Isotope

Isotope是一款實現(xiàn)動態(tài)布局的精致jQuery插件,是單獨(dú)的CSS無法實現(xiàn)的,而且他可以通過jQuery選擇器來控制元素的顯示與隱藏等。

3.Blockslt

BlocksIt.js是一個創(chuàng)建動態(tài)的網(wǎng)格布局的jQuery插件。它將HTML元素轉(zhuǎn)換為“塊”,它們的位置布局類似于網(wǎng)格布局的Pinterest一樣。

4.Wookmark

Wookmark是一款簡單的動態(tài)網(wǎng)格布局的jQuery插件。

5.Pinterest Clone Layout

這是一個客隆了Pinterest網(wǎng)站布局的jQuery,方便你快速創(chuàng)建一個類似于pinterest布局效果的站點(diǎn)

6.Flex

Flex是一個流體不對稱的動畫網(wǎng)格布局插件。它還有一個鼠標(biāo)懸停時放大的功能。

上面六款都是jQuery插件,主要功能就是可以使用他們來制作大家所說的瀑布流布局,當(dāng)然你要是認(rèn)為他們不好,你可以自己動手寫一個這樣的插件,這點(diǎn)我相信您行的,但有很多不懂js的同學(xué),還是可以用一用,頂個急。下面我們一起來看看哪些方網(wǎng)站在使用瀑布流布局。

誰在使用瀑布流布局?

下面展示的都是瀑布流布局的網(wǎng)站,看起來都很經(jīng)典,然而看起來很熟悉,因為它們都是從Pinterest克隆出來的。否則,他們中的許多人只是簡單的創(chuàng)造性使用動態(tài)的網(wǎng)格來展示他們的作品和內(nèi)容。

1.Pinspire

一個經(jīng)典的瀑布流布局案例,常常被人拿來客隆。

2.WoXiHuan

3.Huaban

4.Mishang

5.Trippy

6.Chill

7.Sworly

8.Veerle

9.All Womens Talk

10.GentleMint

除了這些案例之外,當(dāng)然還有更優(yōu)秀的,只不過我沒有發(fā)現(xiàn),如果大家手上還有更好的插件和案例,希望能與我們分享。謝謝大家。

總結(jié)

以上是生活随笔為你收集整理的瀑布流布局浅析+常用插件介绍(转改编)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。