JavaScript實(shí)現(xiàn)瀑布流以及加載效果
一、瀑布流是個(gè)啥?
瀑布流,是比較流行的一種網(wǎng)站頁(yè)面布局,視覺(jué)表現(xiàn)為參差不齊的多欄布局,隨著頁(yè)面滾動(dòng)條向下滾動(dòng),這種布局還會(huì)不斷加載數(shù)據(jù)塊并附加至當(dāng)前尾部。
最早采用瀑布流布局的網(wǎng)站是Pinterest,逐漸在國(guó)內(nèi)流行開來(lái),比如我們熟知的百度圖片的布局,在“很久”以前,百度圖片還是需要一頁(yè)一頁(yè)的點(diǎn)擊進(jìn)行查看更多圖片,而現(xiàn)在的瀑布流布局使用戶查找圖片更加方便。
二、瀑布流的優(yōu)缺點(diǎn)
優(yōu)點(diǎn):
1.節(jié)省了頁(yè)面的空間,不再需要導(dǎo)航和頁(yè)碼按鈕。
2.增強(qiáng)了用戶的體驗(yàn),使用戶的體驗(yàn)更多的是在于瀏覽圖片上,而不是在尋找怎么找下一頁(yè)和切換的操作上。
缺點(diǎn):
1.使用的網(wǎng)頁(yè)類型有限:
這種瀑布流布局只適用于某些特定類型產(chǎn)品中一部分特定類型的內(nèi)容。
比如我們?cè)谀硨氋I東西時(shí),我們就需要記住第幾頁(yè)的哪個(gè)商品是我們想買的,然后再回頭購(gòu)買,這時(shí)候就需要我們的頁(yè)面按鈕來(lái)幫忙記憶,瀑布流反而更加麻煩。
2.永遠(yuǎn)看不到的頁(yè)腳:
如果我們使用瀑布流無(wú)限滾動(dòng)加載模式,那就是說(shuō)我們永遠(yuǎn)也無(wú)法看到我們的頁(yè)腳,當(dāng)用戶一次次的瀏覽到頁(yè)面底部,看到頁(yè)腳,卻因?yàn)樽詣?dòng)加載的內(nèi)容的突然出現(xiàn),無(wú)論怎樣都無(wú)法點(diǎn)擊到頁(yè)腳中的鏈接或登錄時(shí),那么用戶的體驗(yàn)是極為糟糕的,他們可能會(huì)憤怒的關(guān)掉你的網(wǎng)頁(yè)。
3.關(guān)于頁(yè)面數(shù)量:
對(duì)于用戶來(lái)說(shuō),使用瀑布流自動(dòng)加載來(lái)替代傳統(tǒng)的換頁(yè)其實(shí)是很方便的,而對(duì)于開發(fā)者的網(wǎng)站來(lái)說(shuō),頁(yè)面的減少可能就無(wú)法展示更多地相關(guān)信息,最明顯的就是廣告減少。
三、瀑布流寫法及原理
瀑布流到底長(zhǎng)什么樣子呢,那我們現(xiàn)在就來(lái)默寫一個(gè)簡(jiǎn)單的瀑布流布局。先把亂七八糟的基礎(chǔ)樣式和布局稍微的敲一下~這里我們?yōu)榱斯?jié)省空間,就不縮進(jìn)啦~
CSS:
*{margin: 0;padding: 0;} #wrap{width: 840px;margin: 0 auto;border: 1px solid black;overflow: hidden;} #wrap ul{width: 200px;margin: 0 5px;float: left;} #wrap ul li{width: 200px;list-style: none;margin: 10px 0;background: palegreen;font-size: 50px;color: white;text-align: center;}
HTML:
<div id="wrap"> <ul></ul> <ul></ul> <ul></ul> <ul></ul> </div>
以下是簡(jiǎn)單的JS代碼:
var wrap=document.querySelector("#wrap"); var ul=document.querySelectorAll("#wrap ul");//聲明元素塊 //先創(chuàng)建一個(gè)隨機(jī)數(shù)的函數(shù) function ranDom(min,max){ return Math.random()*(max-min+1)+min; } //再創(chuàng)建一個(gè)添加li的函數(shù) function createLi(num){ for(var i=0;i<num;i++){ var newLi=document.createElement("li");//創(chuàng)建li newLi.style.height=ranDom(100,400)+"px";//使用隨機(jī)數(shù)函數(shù)創(chuàng)建高度不同的li var arrul=[]; //將ul的高度進(jìn)行儲(chǔ)存和比較 for(var j=0;j<ul.length;j++){ arrul.push(ul[j].offsetHeight);//儲(chǔ)存ul的高度 } var minHeight=arrul[0]; var minIndex=0; for(var k=0;k<arrul.length;k++){ if(minHeight>arrul[k]){ minHeight=arrul[k];//比較出高度最短的ul然后賦值給minHeight minIndex=k;//把高度最短的ul所在下標(biāo)賦值給minIndex } } ul[minIndex].appendChild(newLi);//向高度最短的ul里添加li } } createLi(15);//執(zhí)行函數(shù),添加15個(gè)li, //創(chuàng)建一個(gè)滾動(dòng)事件 window.onscroll=function(){ // html總高度-可視化窗口高度=body的滾動(dòng)高度 //兼容寫法 var scrollTop=document.body.scrollTop; var clientHeight=document.documentElement.clientHeight||document.body.clientHeight||window.innerHeight; if(document.documentElement.offsetHeight-clientHeight<=scrollTop){ createLi(15); } } //當(dāng)滾動(dòng)快要到達(dá)底部,還沒(méi)有到達(dá)的時(shí)候,再去執(zhí)行函數(shù),創(chuàng)建新的li
這樣我們就實(shí)現(xiàn)了永遠(yuǎn)也看不到頁(yè)腳的自動(dòng)加載瀑布流布局。
四、總結(jié)
瀑布流簡(jiǎn)單來(lái)講就是頁(yè)面容器內(nèi)的多個(gè)高度不固定的容器之間參差不齊的添加內(nèi)容,鼠標(biāo)滾動(dòng)時(shí)不斷在容器內(nèi)的尾部加載數(shù)據(jù),且自動(dòng)加載到空缺位置,也就是例子中的高度最短的位置,不斷循環(huán)。
瀑布流對(duì)于圖片的展現(xiàn),是高效而具有吸引力的,用戶一眼掃過(guò)的快速閱讀模式可以在短時(shí)間內(nèi)獲得更多的信息量,而瀑布流里自動(dòng)加載又避免了用戶鼠標(biāo)點(diǎn)擊的翻頁(yè)操作。
瀑布流的主要特性便是錯(cuò)落有致,定寬而不定高的設(shè)計(jì)讓頁(yè)面區(qū)別于傳統(tǒng)的矩陣式圖片布局模式,巧妙的利用視覺(jué)層級(jí),視線的任意流動(dòng)又緩解了視覺(jué)疲勞,同時(shí)給人以不拘一格的感覺(jué)。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- js圖片加載效果實(shí)例代碼(延遲加載+瀑布流加載)
- 利用JS實(shí)現(xiàn)簡(jiǎn)單的瀑布流加載圖片效果
- javascript實(shí)現(xiàn)瀑布流動(dòng)態(tài)加載圖片原理
- javascript實(shí)現(xiàn)仿百度圖片的瀑布流加載效果
- JavaScript實(shí)現(xiàn)圖片自動(dòng)加載的瀑布流效果
- 解析javascript瀑布流原理實(shí)現(xiàn)圖片滾動(dòng)加載
- javascript瀑布流式圖片懶加載實(shí)例解析與優(yōu)化
- javascript瀑布流式圖片懶加載實(shí)例
- javascript實(shí)現(xiàn)瀑布流加載圖片原理
- js實(shí)現(xiàn)動(dòng)態(tài)加載數(shù)據(jù)瀑布流
相關(guān)文章
JavaScript 網(wǎng)頁(yè)中實(shí)現(xiàn)一個(gè)計(jì)算當(dāng)年還剩多少時(shí)間的倒數(shù)計(jì)時(shí)程序
這篇文章主要介紹了JavaScript 網(wǎng)頁(yè)中實(shí)現(xiàn)一個(gè)計(jì)算當(dāng)年還剩多少時(shí)間的倒數(shù)計(jì)時(shí)程序,需要的朋友可以參考下2017-01-01javascript數(shù)據(jù)結(jié)構(gòu)中棧的應(yīng)用之符號(hào)平衡問(wèn)題
這篇文章主要介紹了javascript數(shù)據(jù)結(jié)構(gòu)中棧的應(yīng)用之符號(hào)平衡問(wèn)題,結(jié)合實(shí)例形式分析了javascript基于棧的形式實(shí)現(xiàn)對(duì)各種括號(hào)如<> {} [] ()等的匹配驗(yàn)證操作相關(guān)應(yīng)用技巧,需要的朋友可以參考下2017-04-04JS函數(shù)動(dòng)態(tài)傳遞參數(shù)的方法分析【基于arguments對(duì)象】
這篇文章主要介紹了JS函數(shù)動(dòng)態(tài)傳遞參數(shù)的方法,結(jié)合實(shí)例形式分析了javascript通過(guò)arguments對(duì)象獲取傳遞參數(shù)的相關(guān)操作技巧,需要的朋友可以參考下2019-06-06不用typsescript如何使用類型增強(qiáng)功能
這篇文章主要給大家介紹了關(guān)于不用typsescript如何使用類型增強(qiáng)功能的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03JavaScript中textRange對(duì)象使用方法小結(jié)
這篇文章主要介紹了JavaScript中textRange對(duì)象使用方法小結(jié),需要的朋友可以參考下2015-03-03ie6下png圖片背景不透明的解決辦法使用js實(shí)現(xiàn)
我們時(shí)常在使用png圖片的時(shí)候,在ie6下發(fā)生背景不透明的問(wèn)題,解決的方法實(shí)在是太多了,下面給大家介紹下一個(gè)js解決的方式,感興趣的朋友可以了解下的2013-01-01js每隔5分鐘執(zhí)行一次ajax請(qǐng)求的實(shí)現(xiàn)方法
每隔5分鐘執(zhí)行一次ajax請(qǐng)求,如何實(shí)現(xiàn)?下面有個(gè)不錯(cuò)的示例,感興趣的朋友可以參考下2013-11-11