<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        AJAX實現瀑布流布局

        來源:懂視網 責編:小采 時間:2020-11-27 22:51:47
        文檔

        AJAX實現瀑布流布局

        AJAX實現瀑布流布局:瀑布流是當前一種比較流行的網站界面布局方式,參差不齊的多欄布局以及到達底部自動加載的方式,使網站在視覺和用戶體驗上都能得到較大的提升。最早使用此布局的是國外的圖片網站Pinterest,之后國內的一些圖片網站也開始使用瀑布流布局,包括和Pintere
        推薦度:
        導讀AJAX實現瀑布流布局:瀑布流是當前一種比較流行的網站界面布局方式,參差不齊的多欄布局以及到達底部自動加載的方式,使網站在視覺和用戶體驗上都能得到較大的提升。最早使用此布局的是國外的圖片網站Pinterest,之后國內的一些圖片網站也開始使用瀑布流布局,包括和Pintere

        瀑布流是當前一種比較流行的網站界面布局方式,參差不齊的多欄布局以及到達底部自動加載的方式,使網站在視覺和用戶體驗上都能得到較大的提升。最早使用此布局的是國外的圖片網站Pinterest,之后國內的一些圖片網站也開始使用瀑布流布局,包括和Pinterest類似的花瓣網、圖片社區lofter、美麗說、蘑菇街等等。

        瀑布流在布局上對于大多數人來說應該是很簡單的,比較只有幾列而已。瀑布流最主要的還是數據的異步加載。

        首先說一下這次實例所用的瀑布流式方法。瀑布流布局實現的方法很多,具體可以自行百度,此處不再贅述。本文中瀑布流實現方法為四列布局(li*4),每個圖片為一個盒子(div>img+p),從后臺讀取數據后賦值給盒子中的元素,判定此時高度最小的列(li),然后將盒子添加到對應的列(li),之后進行下一次判定,以此類推,直至本頁所有數據加載完成。

        代碼部分:

        html+css

        <!DOCTYPE html> 
        <html> 
         <head> 
         <meta charset="UTF-8"> 
         <title>瀑布流布局</title> 
         <style type="text/css"> 
         *{ 
         margin: 0; 
         padding: 0; 
         } 
         ul{ 
         width: 1200px; 
         margin: 0 auto; 
         } 
         ul li{ 
         float: left; 
         width: 250px; 
         list-style: none; 
         margin: 20px; 
         } 
         ul li div{ 
         width: 250px; 
         margin-bottom: 20px; 
         padding: 10px; 
         box-sizing: border-box; 
         border-radius: 5px; 
         box-shadow: 2px 2px 10px #919B9C; 
         } 
         ul li img{ 
         width: 100%; 
         margin-bottom: 10px; 
         } 
         ul li p{ 
         font-family: "microsoft yahei"; 
         font-size: 14px; 
         } 
         </style> 
         <script src="ajax.js" type="text/javascript" charset="utf-8"></script> 
         <script src="pubuliu.js" type="text/javascript" charset="utf-8"></script> 
         </head> 
         <body> 
         <ul id="ul1"> 
         <li></li> 
         <li></li> 
         <li></li> 
         <li></li> 
         </ul> 
         </body> 
        </html>

        javascript部分:ajax部分和實現部分

        /** 
         * 
         * @param {Object} method get和post方式 
         * @param {Object} url 文件路徑 
         * @param {Object} data 頁碼 
         * @param {Object} success 成功的函數 
         */ 
        function ajax(method, url, data, success) { 
         var xhr = null; 
         try { 
         xhr = new XMLHttpRequest(); 
         } catch (e) { 
         xhr = new ActiveXObject('Microsoft.XMLHTTP'); 
         } 
         
         if (method == 'get' && data) { 
         url += '?' + data; 
         } 
         
         xhr.open(method,url,true); 
         if (method == 'get') { 
         xhr.send(); 
         } else { 
         xhr.setRequestHeader('content-type', 'application/x-www-form-urlencoded'); 
         xhr.send(data); 
         } 
         
         xhr.onreadystatechange = function() { 
         
         if ( xhr.readyState == 4 ) { 
         if ( xhr.status == 200 ) { 
         success && success(xhr.responseText); 
         console.log(xhr.responseText); 
         } else { 
         alert('出錯了,Err:' + xhr.status); 
         } 
         } 
         
         } 
        }

         ajax部分是在之前所寫的Ajax工作原理以及函數的簡單封裝上修改而來,理解那個之后看這個基本沒難度。這個相對那個來說多了一個data參數,data是用來讀取數據的頁碼。

        window.onload = function() { 
         //獲取界面節點 
         var ul = document.getElementById('ul1'); 
         var li = document.getElementsByTagName('li'); 
         var liLen = li.length; 
         var page = 1; 
         var bool = false; 
         //調用接口獲取數據 
         loadPage();//首次加載 
         /** 
         * 加載頁面的函數 
         */ 
         function loadPage(){ 
         ajax('get', 'getPics.php', 'cpage='+page, function(data) { 
         //將數據庫中獲取的數據轉換成數組形式,這里要根據數據庫中的數據形式來寫,這里我獲取到的是json形式 
         var data = JSON.parse(data); 
         //將數據寫入到div中 
         for(var i = 0; i < data.length; i++) { 
         var index = getShort(li);//查找最短的li 
         //創建新的節點:div>img+p 
         var div = document.createElement('div'); 
         var img = document.createElement('img'); 
         img.src = data[i].preview;//img獲取圖片地址 
         img.alt = "等著吧..." 
         //根據寬高比計算img的高,為了防止未加載時高度太低影響最短Li的判斷 
         img.style.height = data[i].height * (230 / data[i].width) + "px"; 
         div.appendChild(img); 
         var p = document.createElement('p'); 
         p.innerHTML = data[i].title;//p獲取圖片標題 
         div.appendChild(p); 
         //加入到最短的li中 
         li[index].appendChild(div); 
         } 
         bool = true;//加載完成設置開關,用于后面判斷是否加載下一頁 
         }); 
         } 
         
         window.onscroll = function (){ 
         var index = getShort(li); 
         var minLi = li[index]; 
         var scrollTop = document.documentElement.scrollTop||document.body.scrollTop; 
         
         if(minLi.offsetHeight+minLi.offsetTop<scrollTop+document.documentElement.clientHeight){ 
         //開關為開,即上一頁加載完成,才能開始加載 
         if(bool){ 
         bool = false; 
         page++; 
         loadPage(); 
         } 
         } 
         } 
         
        } 
        /** 
         * 獲取數組中高度最小的索引 
         * @param {Object} li 數組 
         */ 
        function getShort(li) { 
         var index = 0; 
         var liHeight = li[index].offsetHeight; 
         for(var i = 0; i < li.length; i++) { 
         if(li[i].offsetHeight < liHeight) { 
         index = i; 
         liHeight = li[i].offsetHeight; 
         } 
         } 
         return index; 
        } 

        這部分的功能主要是動態的將生成的div寫入到頁面中,其中包含對盒子樣式的修改和數據的寫入,數據通過ajax函數從服務器端獲取。

        需要注意的是:該實例的運行依賴于服務器,所以需要在本地搭建一個簡單的服務器,快速搭建可以使用WampService。

        下面是我們數據來源的php代碼:

        <?php 
        header('Content-type:text/html; charset="utf-8"'); 
         
        /* 
        API: 
         getPics.php 
         
         參數 
         cpage : 獲取數據的頁數 
        */ 
        $cpage = isset($_GET['cpage']) ? $_GET['cpage'] : 1; 
         
        $url = 'http://www.wookmark.com/api/json/popular?page=' . $cpage; 
         
        $content = file_get_contents($url); 
        $content = iconv('gbk', 'utf-8', $content); 
         
        echo $content; 
         
        ?> 

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        AJAX實現瀑布流布局

        AJAX實現瀑布流布局:瀑布流是當前一種比較流行的網站界面布局方式,參差不齊的多欄布局以及到達底部自動加載的方式,使網站在視覺和用戶體驗上都能得到較大的提升。最早使用此布局的是國外的圖片網站Pinterest,之后國內的一些圖片網站也開始使用瀑布流布局,包括和Pintere
        推薦度:
        標簽: 實現 布局 ajax
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲AV无码专区在线厂| 亚洲第一页在线播放| 亚洲AV无码一区二区三区性色| 18未年禁止免费观看| 亚洲视频一区在线播放| 99re6在线精品视频免费播放| 亚洲AV日韩AV天堂久久| 最近中文字幕完整免费视频ww| 亚洲国产精品lv| 国产精品视频免费| 亚洲黄页网在线观看| 免费看的一级毛片| 激情吃奶吻胸免费视频xxxx| 亚洲?v女人的天堂在线观看| 久久一区二区免费播放| 亚洲成AV人片在线观看无| 在线观看免费中文视频| 亚洲一区无码中文字幕乱码| 成人免费无码视频在线网站| 亚洲AV无码AV吞精久久| 亚洲综合AV在线在线播放| 日本中文字幕免费高清视频| 亚洲中文久久精品无码1| 永久免费看bbb| 97超高清在线观看免费视频| 亚洲视频小说图片| 在线观看免费精品国产| 精品乱子伦一区二区三区高清免费播放 | 色偷偷女男人的天堂亚洲网| 大香人蕉免费视频75| 一个人看的免费观看日本视频www| 亚洲国产精品成人精品无码区| 2021在线永久免费视频| 亚洲欧美在线x视频| 日韩亚洲人成在线综合日本| 成人免费午夜无码视频| 91香焦国产线观看看免费| 7777久久亚洲中文字幕| 成人亚洲性情网站WWW在线观看| 免费看片在线观看| 又大又硬又粗又黄的视频免费看 |