3) 絕對定位。即 Pinterest ,Mark之,KISSY 採用的方式:
html
缺點:git
KISSY 的 Waterfall 組件主要包含兩個部分,一個是對現有數據塊進行排列計算各自所在的位置; 二是下拉滾動時,觸發加載數據操做,並把數據添加到目標容器中。github
1) 數據塊排列,算法步驟簡述下:算法
2) 異步加載數據,前面講的是如何對容器中已有元素進行排列,但不少狀況下,還須要不斷加載新數據塊,爲此專門設計了一個獨立的模塊 KISSY.Waterfall.Loader,其實這個功能就更簡單了,僅包含兩個步驟:api
看到這邊,是否是很想試用一下~~ 嗯嗯,這裏給出一些相關學習資料和示例,以供參考:瀏覽器
歡迎試用和提出意見~~緩存
跟風,尤爲受pinterest的煽風點火,瀑布流如今很多人關注。我正好最近比較閒,加上有人曾在我站點提出但願我介紹點瀑布流的東西,因此,今兒個也隨下大流。app
pinterest以及上面迅雷UED xwei的瀑布流demo(至少在FireFox下仍是有致命的顯示bug的)都是採用的絕對定位實現的,有相對複雜的位置計算。異步
我一貫不喜歡吃別人嚼過的米飯,因而嘗試使用另外的原理實現。我是個流體佈局控,對絕對定位啊、浮動啊什麼的一貫沒什麼好感,因而,這裏要介紹的就是基於多欄列表流體佈局實現的瀑布流佈局效果。函數
大體結構、佈局見下面的手繪圖:
沒有複雜的位置計算,不須要知道里面元素的高度以及寬度,且易理解,關鍵是具體實現~~
您能夠狠狠地點擊這裏:基於多欄列表瀑布流佈局demo
歡迎各類滾動,縮放等測試。低版本IE瀏覽器也是兼容滴。問題嘛也是有滴,就是滾動到必定位置再F5刷新的時候,部分加載的內容有丟失,須要從新滾 動加載。這個嘛,我我的以爲小小demo,不必折騰啦(實際上要實現也比較容易,改動以下:每次滾動不是append一個節點,而是連續回調直到加載到 屏幕下方。不懂什麼意思?花點功夫看看JS實現原理就會明白了)~~
第一次進入的時候,根據瀏覽器寬度以及每列寬度計算出列表個數,而後無論三七二十一,每列先加載個5張圖片再說。
當滾動的時候,對每一列的底部位置作檢測,若是在屏幕中或屏幕上方,則當即append一個新圖片(注意:爲了簡化代碼,提升性能,同時便於演示等,這裏只append了一個)。由於,滾動時連續的,所以,咱們實際看到的效果是圖片不斷load出來。
當瀏覽器寬度改變的時候,頁面上有個id
爲waterFallDetect
空span
標籤,這個標籤做用有兩個:一是實現兩端對齊效果,二是用來檢測瀑布流佈局是否須要刷新。
檢測原理以下:
該span
標籤寬度與一個列表寬度一致,當瀏覽器寬度變小的時候,若是小到必定程度,顯然,瀏覽器最右邊的列表就會跑到下一行,把空span
擠到後面去,空span
發生較大的水平位移,顯然,能夠通知腳本,佈局須要刷新;當瀏覽器寬度變大的時候,若是變大的尺寸超過一列的寬度,顯然,這個空span
灰跑到第一行去,一樣是發生較大的水平位移,所以,又能夠通知腳本刷新瀑布流佈局了。
這個方法的好處是幾乎沒有計算就能夠一點不差地知道什麼時候瀑布流佈局須要刷新。這顯然要比設置resize定時器+位置尺寸計算要簡單高性能地多。
滾動時的頁面刷新是基於HTML字符串的處理,而不是更改每一個DOM元素的位置(這是絕對定位實現的處理),所以,這裏的效率顯然更高。
無聊時候的折騰,有不足與不許確之處歡迎指正。一些實現的具體細節等也是很是歡迎提問交流的。
原創文章,轉載請註明來自 張鑫旭-鑫空間-鑫生活[ http://www.zhangxinxu.com]