中文字幕第五页-中文字幕第页-中文字幕韩国-中文字幕最新-国产尤物二区三区在线观看-国产尤物福利视频一区二区

網(wǎng)頁(yè)設(shè)計(jì)中的瀑布流式布局

2024-01-08    分類: 網(wǎng)站建設(shè)

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

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

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

幾種實(shí)現(xiàn)方式

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

1) 傳統(tǒng)多列浮動(dòng)。即 蘑菇街和哇哦 采用的方式:

各列固定寬度,并且左浮動(dòng);

一列中的數(shù)據(jù)塊為一組,列中的每個(gè)數(shù)據(jù)塊依次排列即可;

更多數(shù)據(jù)加載時(shí),需要分別插入到不同的列上;

線上例子。

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

布局簡(jiǎn)單,應(yīng)該說沒啥特別的難點(diǎn);

不用明確知道數(shù)據(jù)塊高度,當(dāng)數(shù)據(jù)塊中有圖片時(shí),就不需要指定圖片高度。

缺點(diǎn):

列數(shù)固定,擴(kuò)展不易,當(dāng)瀏覽器窗口大小變化時(shí),只能固定的x列,如果要添加一列,很難調(diào)整數(shù)據(jù)塊的排列;

滾動(dòng)加載更多數(shù)據(jù)時(shí),還要指定插入到第幾列中,還是不方便。

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

由 chrome/ff 瀏覽器直接渲染出來,可以指定容器的列個(gè)數(shù),列間距,列中間邊框,列寬度來實(shí)現(xiàn);

column-count 為列數(shù); column-gap 為每列間隔距離; column-rule 為間隔邊線大小; column-width 為每列寬度; 當(dāng)只設(shè)置 column-width 時(shí),瀏覽器窗口小于一列寬度時(shí),列中內(nèi)容自動(dòng)隱藏; 當(dāng)只設(shè)置 column-count 時(shí),平均計(jì)算每列寬度,列內(nèi)內(nèi)容超出則隱藏; 都設(shè)了 column-count 和column-width,瀏覽器會(huì)根據(jù) count 計(jì)算寬度和 width 比較,取大的那個(gè)值作為每列寬度,然后當(dāng)窗口縮小時(shí),width 的值為每列最小寬度。這邊其實(shí)很簡(jiǎn)單,簡(jiǎn)易自己嘗試下,詳細(xì)可參考 https://developer.mozilla.org/en/CSS3_Columns 中的說明。 a jQuery16108010429281727349="9">

線上例子。

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

直接 CSS 定義,最方便了;

擴(kuò)展方便,直接往容器里添加內(nèi)容即可。

缺點(diǎn):

只有高級(jí)瀏覽器中才能使用;

還有一個(gè)缺點(diǎn),他的數(shù)據(jù)塊排列是從上到下排列到一定高度后,再把剩余元素依次添加到下一列,這個(gè)本質(zhì)上就不一樣了;

鑒于這兩個(gè)主要缺點(diǎn),注定了該方法只能局限于高端瀏覽器,而且,更適合于文字多欄排列。

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

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

線上例子。

缺點(diǎn):

需要實(shí)現(xiàn)知道數(shù)據(jù)塊高度,如果其中包含圖片,需要知道圖片高度;

JS 動(dòng)態(tài)計(jì)算數(shù)據(jù)塊位置,當(dāng)窗口縮放頻繁,可能會(huì)狂耗性能。

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

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

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

初始化時(shí),對(duì)容器中已有數(shù)據(jù)塊元素進(jìn)行第一次計(jì)算,需要用戶給定: a,容器元素 — 以此獲取容器總寬度; b,列寬度; c,最小列數(shù); 最終列數(shù)取的是容器寬度/列寬度和最小列數(shù)的大值,這樣保證了,當(dāng)窗口很小時(shí),仍然出現(xiàn)最小列數(shù)的數(shù)據(jù);

獲得列數(shù)后,需要保存每個(gè)列的當(dāng)前高度,這樣在添加每個(gè)數(shù)據(jù)塊時(shí),才知道起始高度是多少;

依次取容器中的所有數(shù)據(jù)塊,先尋找當(dāng)前高度最小的某列,之后根據(jù)列序號(hào),確定數(shù)據(jù)塊的left,top值,left 為所在列的序號(hào)乘以列寬,top 為所在列的當(dāng)前高度,最后更新所在列的當(dāng)前高度加上這個(gè)數(shù)據(jù)塊元素的高度,至此,插入一個(gè)元素結(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ā)會(huì)很頻繁,可以將回調(diào)函數(shù)緩存一段時(shí)候后執(zhí)行,即當(dāng)這段時(shí)間內(nèi)多次觸發(fā)了resize事件,但回調(diào)函數(shù)只會(huì)執(zhí)行一次(見 S.buffer 函數(shù))

感興趣的可以參見源碼。

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

綁定滾動(dòng)事件,并確定預(yù)加載線高度值,即滾動(dòng)到哪個(gè)高度后,需要去加載數(shù)據(jù),其實(shí)這個(gè)就是列的最小高度值,這樣當(dāng)前滾動(dòng)值和最小高度值比較一下即可判斷出來,是否要觸發(fā)加載數(shù)據(jù);

加載數(shù)據(jù),為了不對(duì)數(shù)據(jù)源做太多限制,完全由使用者自己決定數(shù)據(jù)源從哪邊獲取和其格式,這樣更好的方便用戶使用。為此,該組件只提供一個(gè)load(success,end) 接口,怎樣load 由用戶自己去定義,而其中的 success/end,分別給出如何添加新數(shù)據(jù)(suceess 即同 addItems)/如何停止加載的接口。這樣真是太方便了~~

感興趣的可以參見源碼。

KISSY.Waterfall 示例和文檔

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

Waterfall API 文檔,相關(guān)構(gòu)造器,配置項(xiàng),方法都在這里;

示例,包含靜態(tài)和動(dòng)態(tài)兩種。

歡迎試用和提出意見~~

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

#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;*/ }

本文來源于成都網(wǎng)站建設(shè)公司與成都網(wǎng)站設(shè)計(jì)制作公司-創(chuàng)新互聯(lián)成都公司!

網(wǎng)頁(yè)標(biāo)題:網(wǎng)頁(yè)設(shè)計(jì)中的瀑布流式布局
標(biāo)題來源:http://m.2m8n56k.cn/news7/312657.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營(yíng)銷、商城網(wǎng)站ChatGPT、營(yíng)銷型網(wǎng)站建設(shè)、網(wǎng)站收錄微信小程序

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司
主站蜘蛛池模板: 久草视 | 国内一级野外a一级毛片 | 久久一日本道色综合久 | 国产女王女m视频vk 国产女王丨vk | 91久久亚洲精品一区二区 | 盈盈性影院 | 欧美高清视频在线观看 | 欧美一区二区三区高清视频 | 特级毛片全部免费播放器 | 亚洲一区在线观看视频 | 99久久精品免费看国产一区二区三区 | 夜间福利网站 | 67194午夜 | 一区二区三区免费精品视频 | 欧美激情一区二区亚洲专区 | 日韩一级欧美一级一级国产 | 日韩精品在线播放 | 国产精品激情丝袜美女 | 久久久久在线 | 国产精品视频第一区二区三区 | 91精品国产免费 | 国产视频精品久久 | 国产一区亚洲欧美成人 | 免费的三级网站 | 全部孕妇毛片丰满孕妇孕交 | 国内精品久久久久久网站 | 日韩三级中文 | 免费视频久久久 | 国产tv在线 | 色在线免费视频 | 乱码一区 | 精品国产免费一区二区三区五区 | 性色xxx | 中文字幕在线观看一区二区 | 精品日韩二区三区精品视频 | 97视频在线免费播放 | 全免费毛片在线播放 | 在线精品欧美日韩 | 视频亚洲一区 | a级毛片在线看日本 | 成年人免费小视频 |