久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

淺談瀑布流網(wǎng)頁實(shí)現(xiàn)中遇到的問題和解決方法

 

淺談瀑布流網(wǎng)頁實(shí)現(xiàn)中遇到的問題和解決方法 三聯(lián)

先上Demo

瀑布流排序 : http://cued.xunlei.com/demos/publ/demo1.html

瀑布流+無限拖 http://cued.xunlei.com/demos/publ/demo2.html

隨著pinterest的走紅,瀑布流式的布局被越來越多的網(wǎng)站所使用,這種布局確實(shí)有很多好處,圖片列表頁有很強(qiáng)大的視覺感染力,而且還提高了用 戶“發(fā)現(xiàn)好圖”的效率。瀑布流的實(shí)現(xiàn)有很多種方式,之前淘寶UED有篇文章詳細(xì)的介紹過各種方式的優(yōu)劣。今天我們主要討論一下絕對(duì)排序來實(shí)現(xiàn)瀑布流的方式 即 Pinterest 采用的方式。

首先說下瀑布流的排序算法,參考demo1,思路非常簡單,我們把瀑布流拆成三個(gè)部分來看:容器、列、格子

1.先計(jì)算當(dāng)前屏幕最多能容納幾列瀑布,其值為 “向下取整(屏幕可見區(qū)域?qū)挾?(格子寬度+間距))”;

2.為了保證容器的居中,將容器的寬度設(shè)置為 列數(shù)* (格子寬度+間距) – 間距,這里需要注意的是 當(dāng)容器的寬度計(jì)算出來之后再顯示,否則會(huì)造成頁面寬度的抖動(dòng),影響體驗(yàn)。;

3.排序開始,先把前N(N為列數(shù))個(gè)格子分別放到每一列中,然后每次尋找高度最小的一列,把格子放進(jìn)去(left值為列序號(hào)*(格子寬度+間距),top值為 列高+間距),并刷新列的高度,遍歷所有格子直到所有的格子都被排序。

最后將事件句柄綁定到window.onload和window.onresize上,一個(gè)瀑布流布局的頁面就出來了。

這樣的排序算法看起來很美好,可真正結(jié)合異步加載數(shù)據(jù)應(yīng)用到頁面里還要解決以下幾個(gè)問題

1.當(dāng)縮放瀏覽器窗口時(shí)會(huì)不斷地觸發(fā)事件,如果每次都響應(yīng)的話會(huì)狂耗性能,需要在縮放動(dòng)作結(jié)束后再執(zhí)行重排方法。

2.頁面滾動(dòng)到底部請(qǐng)求數(shù)據(jù)成功之后只對(duì)新增的節(jié)點(diǎn)重排。

3.如果服務(wù)器無法給出圖片高度,需要在圖片加載完畢之后再進(jìn)行重排。

第一個(gè)問題我是用setTimeout和clearTimeout來解決的,思路是窗口變化之后開始計(jì)時(shí),如果窗口還在變換則從新開始計(jì)時(shí),窗口不再變化則延時(shí)(很短的時(shí)間)觸發(fā)重排事件。暫時(shí)只想到這個(gè),這里應(yīng)該還有更好的方法。

代碼如下

  var re;
window.onresize = function() {
clearTimeout(re);
re = setTimeout(resize,100);
};

第二個(gè)問題在于如果每次有新的數(shù)據(jù)加載,都要對(duì)整個(gè)容器內(nèi)的節(jié)點(diǎn)進(jìn)行重排,非常消耗性能。解決思路:

1.將列保存在全局?jǐn)?shù)組中,每次重排或者新增格子之后更新數(shù)組的數(shù)據(jù),這樣下次執(zhí)行排序算法的時(shí)候可以直接調(diào)用。

2.將新增格子保存在數(shù)組中作為參數(shù)傳遞給排序算法,僅對(duì)新格子進(jìn)行遍歷和操作。

第三個(gè)問題是如果服務(wù)器無法給出圖片尺寸,那么必須在圖片完全加載完畢之后才可進(jìn)行排序(因?yàn)楦叨仁菍?shí)時(shí)獲取的,圖片不全高度有誤差),這里沒有什 么好辦法,只能遍歷圖片,每張圖片加載成功后執(zhí)行一個(gè)回調(diào)函數(shù),將加載成功的圖片數(shù)量+1,當(dāng)加載成功的圖片數(shù)量等于圖片總數(shù)的時(shí)候執(zhí)行排序方法。缺點(diǎn)是 有一張圖片加載不成共就無法看到所有的,真正項(xiàng)目中還是需要在異步加載數(shù)據(jù)的時(shí)候獲取圖片尺寸。

好了,以上就是在這次瀑布流實(shí)現(xiàn)過程中遇到的問題和解決方法,由一開始加載3-4屏就卡死到現(xiàn)在可以無限加載(ff,chrome),深感優(yōu)化js的必要性和無限性。一點(diǎn)小心得寫在這里權(quán)當(dāng)拋磚引玉,大家對(duì)瀑布流實(shí)現(xiàn)的優(yōu)化有什么見解歡迎一起交流討論。

作者:xwei

文章來源:迅雷CUED

 
【網(wǎng)站聲明】本站除付費(fèi)源碼經(jīng)過測試外,其他素材未做測試,不保證完整性,網(wǎng)站上部分源碼僅限學(xué)習(xí)交流,請(qǐng)勿用于商業(yè)用途。如損害你的權(quán)益請(qǐng)聯(lián)系客服QQ:2655101040 給予處理,謝謝支持。

相關(guān)文檔推薦

這篇文章給大家詳細(xì)介紹了HTML頁面跳轉(zhuǎn)及參數(shù)傳遞問題,需要的朋友參考下吧
這篇文章主要介紹了純css實(shí)現(xiàn)照片墻3D效果的示例代碼,可以實(shí)現(xiàn)鼠標(biāo)經(jīng)過圖片實(shí)現(xiàn)改變,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
本篇文章主要介紹了純 Css 繪制扇形的方法示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
本篇文章主要介紹了一份純CSS loading效果代碼示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
這篇文章主要介紹了css 實(shí)現(xiàn)文字過長自動(dòng)隱藏功能,需要的朋友可以參考下
本篇文章主要介紹了詳解CSS3 rem(設(shè)置字體大小) 教程,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
主站蜘蛛池模板: 国产传媒在线观看 | 欧美电影在线 | 黄色大片免费网站 | 日韩精品视频中文字幕 | 日韩aⅴ在线观看 | 凹凸日日摸日日碰夜夜 | 久久精品中文字幕 | av网站在线播放 | 亚洲精品一区二区三区在线观看 | 成年网站在线观看 | 男人天堂色 | 一a一片一级一片啪啪 | 91在线影院 | 亚洲91精品 | 国产高清免费视频 | 欧美日韩精品中文字幕 | 91不卡 | 91资源在线| 激情五月综合 | 夜夜操天天艹 | 欧美亚洲综合久久 | 波多野结衣在线观看一区二区三区 | 九七午夜剧场福利写真 | 欧美在线视频不卡 | 曰韩三级 | 网站国产| 有码在线 | 瑟瑟免费视频 | 欧美性一区二区三区 | 亚洲免费视频一区二区 | 91综合网 | 国产目拍亚洲精品99久久精品 | 国产91在线播放 | 最新免费视频 | 久久久久久成人 | 成人欧美一区二区三区白人 | 亚洲第1页 | 91精品国产91久久久久久最新 | 蜜臀av日日欢夜夜爽一区 | 懂色av色香蕉一区二区蜜桃 | 最近中文字幕免费 |