Js利用AJAX實現(xiàn)瀑布流

瀑布流

  • 瀑布流這個效果以前很流行瑰抵,常見于圖片站,電商站或者藝術(shù)類網(wǎng)站
  • 比如最早的蘑菇街,蘑菇街最早的定位模式在于"逛"這個含義,增加頁面的PV值
  • 現(xiàn)在基本上藝術(shù)類網(wǎng)站或者圖片站用的比較多谴分。主要還是利用AJAX
  • 當(dāng)用戶滾動到頁面的底部以后田弥,它會接收數(shù)據(jù)摄悯,然后創(chuàng)建節(jié)點
  • 具體見下圖(具體看右邊滾動條)
1213.gif

瀑布流原理

  • 瀑布流必須要放到模擬服務(wù)器端執(zhí)行,純靜態(tài)無法測試!

  • 瀑布流充分利用了AJAX特性,AJAX是它的核心
  • 瀑布流是寬度一樣靠抑,但是高度不一樣.
  • 其次最重要的就是找到最短的那個列
  • 我這個效果是列規(guī)定死了就4列,
  • 有的可以隨著瀏覽器的變化而改變列數(shù)
  • 最重要的還是對數(shù)據(jù)的處理

代碼

  • 代碼我封裝好了。改改CSS數(shù)值還有寬度即可适掰。
  • 注釋全,簡單明了
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv='Content-Type' content="text/html; charset=utf-8">
    <meta http-equiv='X-UA-Compatible' content='IE=edge,chrome=1'>
    <title>封裝瀑布流</title>
    <script src="js/ajax.js"></script>
</head>
<style>
    *{margin:0px;padding:0px;}
    #main{width:1040px;margin:100px auto;}
    li{width:247px;list-style-type: none;float:left;margin-right:10px;}
    li div{border:1px solid #000;padding:10px;margin-bottom:10px;overflow: hidden;}
    li div img{ width:225px;display: block;}
</style>
<body>
<ul id="main">
    <li></li>
    <li></li>
    <li></li>
    <li></li>
</ul>
</body>
<script>
    //使用方法參數(shù)調(diào)用最外面的框子即可
    waterfall(document.getElementById("main"));
    //代碼開始都封裝好了放在了waterfall里面
    // 瀑布流核心就是找到高度最小的LI然后把節(jié)點插入到里面,所以最關(guān)鍵的是找到最小的li
    function waterfall(obj){
        var LiAll = obj.getElementsByTagName("li");   //獲取到容器下面所有的列
        var length = LiAll.length;  //獲取到個數(shù)
        var page = 1;  //設(shè)置頁數(shù)
        var flag = true;  //開關(guān)
        /*第一步找到高度最小的LI*/
        function getShort(){
            var index = 0 ;  //獲取到序號
            var firstHeight = LiAll[index].offsetHeight;  //獲取到第一個高度
            //思路利用冒泡排序颂碧。就是凡是都和第一個比荠列。當(dāng)后面的要是比第一個大則不考慮,要是比第一個小稚伍,則變成第一個弯予,序號數(shù)值全變。然后和后面比較
            for(var i=1;i<length;i++)
            {
                if(LiAll[i].offsetHeight<firstHeight)
                {
                    index = i ;  //賦值index
                    firstHeight = LiAll[index].offsetHeight;   //賦值高度index
                }
            }
            return index;  //返回最小的序號
        }
        /*第二部接受數(shù)據(jù)插入節(jié)點*/
        function getContent(){
            var url = "getPics.php?cpage="+page;  //接口地址个曙⌒饽郏可以更改
            ajax({
                type:"get",  //請求方式get
                url: url,   //請求地址
             //data:"",這里我就不發(fā)送了,只接受就可以了
                before:function(){
                     console.log("發(fā)送前進行的操作")
                },
                error:function(status,statusText){   //如果出現(xiàn)錯誤后,第一個表示錯誤的狀態(tài) 第二個表示錯誤的原因
                    console.log(status+"||"+statusText);
                },
                success:function(data){
                    var data = JSON.parse(data);  //因為獲取到的是字符串垦搬,所以轉(zhuǎn)別了格式
                    for(var i=0;i<data.length;i++)
                    {
                        var index = getShort();  //找到最短的LI準(zhǔn)備插入數(shù)據(jù)
                        var oDiv = document.createElement("div");  //創(chuàng)建DIV節(jié)點
                        var oImg = document.createElement("img");  //創(chuàng)建IMG節(jié)點
                        var oP = document.createElement("p");      //創(chuàng)建P節(jié)點
                        oImg.src = data[i].image;  //賦值地址
                        //這里因為是FOR循環(huán)呼寸,可能等不到頁面加載完就執(zhí)行下去了,頁面就變形了猴贰,所以先撐開
                        oImg.style["width"] = "225px";
                        oImg.style["height"] = data[i].height*(225/data[i].width)+"px";
                        oP.innerHTML = data[i].title;  //P節(jié)點賦值內(nèi)容
                        oDiv.appendChild(oImg);     //插入節(jié)點
                        oDiv.appendChild(oP);    //插入P節(jié)點
                        LiAll[index].appendChild(oDiv);   //在最短的那個li里面插入節(jié)點
                        flag = true ;  //都插入完以后開關(guān)打開
                    }
                }
            })
        }
        getContent();  //開始執(zhí)行对雪。獲取數(shù)據(jù)初始化
       //下面是配合滾動軸實現(xiàn)流的效果
       //思路他要是想下滾,肯定就是最小的li的高度+它距離頂端的距離<頁面所見的高度+滾動的高度,只有這樣用戶才會滾動
        //第一步獲取高度最小的LI距離頂端的距離
        function getTop(){
            var Top = 0 ;
            while(obj)
            {
                Top += obj.offsetTop;  //累加
                obj = obj.offsetParent;  //我這里是每加一回米绕,對象就變成了他的父元素瑟捣,最后找到BODY,然后就結(jié)束
            }
            return Top;
        }
        //開始綁定滾動
        window.onscroll = function(){
            var index = getShort();  //找到最小的序號
            var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;  //獲取到滾動條的距離
            if(LiAll[index].offsetHeight+getTop(LiAll[index])<document.documentElement.clientHeight+scrollTop)
            {
                if(flag)  //當(dāng)開關(guān)打開執(zhí)行。開關(guān)要是關(guān)閉就不執(zhí)行
                {
                    flag = false;  //開關(guān)關(guān)閉
                    page++;  //頁碼加1
                    getContent();  //然后開始執(zhí)行插入內(nèi)容
                }
            }
        }
    }
</script>
</html>

以上瀑布流結(jié)束

代碼地址請點擊GitHub地址

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末栅干,一起剝皮案震驚了整個濱河市迈套,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌碱鳞,老刑警劉巖桑李,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異窿给,居然都是意外死亡贵白,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進店門崩泡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來禁荒,“玉大人,你說我怎么就攤上這事角撞∪剑” “怎么了?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵靴寂,是天一觀的道長。 經(jīng)常有香客問我召耘,道長百炬,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任污它,我火速辦了婚禮剖踊,結(jié)果婚禮上庶弃,老公的妹妹穿的比我還像新娘。我一直安慰自己德澈,他們只是感情好歇攻,可當(dāng)我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著梆造,像睡著了一般缴守。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上镇辉,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天屡穗,我揣著相機與錄音,去河邊找鬼忽肛。 笑死村砂,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的屹逛。 我是一名探鬼主播础废,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼罕模!你這毒婦竟也來了评腺?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤手销,失蹤者是張志新(化名)和其女友劉穎歇僧,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體锋拖,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡诈悍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了兽埃。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片侥钳。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖柄错,靈堂內(nèi)的尸體忽然破棺而出舷夺,到底是詐尸還是另有隱情,我是刑警寧澤售貌,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布给猾,位于F島的核電站,受9級特大地震影響颂跨,放射性物質(zhì)發(fā)生泄漏敢伸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一恒削、第九天 我趴在偏房一處隱蔽的房頂上張望池颈。 院中可真熱鬧尾序,春花似錦、人聲如沸躯砰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽琢歇。三九已至兰怠,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間矿微,已是汗流浹背痕慢。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留涌矢,地道東北人掖举。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像娜庇,于是被迫代替她去往敵國和親塔次。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案名秀? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J的外補...
    _Yfling閱讀 13,728評論 1 92
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,504評論 25 707
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫励负、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,024評論 4 62
  • 流星 /小聰 抹去晚霞的羞澀 夜 涂亮了星光 調(diào)皮的流星 閃著熒火蟲的光亮 短短的弧線 淡淡的憂傷 少了一個你 碎...
    令狐小聰閱讀 190評論 0 0
  • 在無保護性行為之后,緊急避孕藥是一種防止非意愿妊娠的補救措施汁掠。那么略吨,口服緊急避孕藥會不會有風(fēng)險呢? 文/中國福利會...
    某蹄aixoise閱讀 257評論 0 0