亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

AJAX實現(xiàn)瀑布流布局

 更新時間:2016年10月19日 16:00:54   作者:張飛翔  
這篇文章主要介紹了AJAX實現(xiàn)瀑布流布局的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下

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

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

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

代碼部分:

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部分和實現(xiàn)部分

/** 
 * 
 * @param {Object} method get和post方式 
 * @param {Object} url 文件路徑 
 * @param {Object} data 頁碼 
 * @param {Object} success 成功的函數(shù) 
 */ 
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工作原理以及函數(shù)的簡單封裝上修改而來,理解那個之后看這個基本沒難度。這個相對那個來說多了一個data參數(shù),data是用來讀取數(shù)據(jù)的頁碼。

window.onload = function() { 
  //獲取界面節(jié)點 
  var ul = document.getElementById('ul1'); 
  var li = document.getElementsByTagName('li'); 
  var liLen = li.length; 
  var page = 1; 
  var bool = false; 
  //調(diào)用接口獲取數(shù)據(jù) 
  loadPage();//首次加載 
  /** 
   * 加載頁面的函數(shù) 
   */ 
  function loadPage(){ 
    ajax('get', 'getPics.php', 'cpage='+page, function(data) { 
      //將數(shù)據(jù)庫中獲取的數(shù)據(jù)轉(zhuǎn)換成數(shù)組形式,這里要根據(jù)數(shù)據(jù)庫中的數(shù)據(jù)形式來寫,這里我獲取到的是json形式 
      var data = JSON.parse(data); 
      //將數(shù)據(jù)寫入到div中 
      for(var i = 0; i < data.length; i++) { 
        var index = getShort(li);//查找最短的li 
        //創(chuàng)建新的節(jié)點:div>img+p 
        var div = document.createElement('div'); 
        var img = document.createElement('img'); 
        img.src = data[i].preview;//img獲取圖片地址 
        img.alt = "等著吧..." 
        //根據(jù)寬高比計算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獲取圖片標(biāo)題 
        div.appendChild(p); 
        //加入到最短的li中 
        li[index].appendChild(div); 
      } 
      bool = true;//加載完成設(shè)置開關(guān),用于后面判斷是否加載下一頁 
    }); 
  } 
   
  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){ 
      //開關(guān)為開,即上一頁加載完成,才能開始加載 
      if(bool){ 
        bool = false; 
        page++; 
        loadPage(); 
      } 
    } 
  } 
 
} 
/** 
 * 獲取數(shù)組中高度最小的索引 
 * @param {Object} li 數(shù)組 
 */ 
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; 
} 

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

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

下面是我們數(shù)據(jù)來源的php代碼:

<?php 
header('Content-type:text/html; charset="utf-8"'); 
 
/* 
API: 
  getPics.php 
 
    參數(shù) 
    cpage : 獲取數(shù)據(jù)的頁數(shù) 
*/ 
$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; 
 
?> 

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • AJAX 請求區(qū)分 $_SERVER[''HTTP_X_REQUESTED_WITH''] 小解

    AJAX 請求區(qū)分 $_SERVER[''HTTP_X_REQUESTED_WITH''] 小解

    關(guān)于這個內(nèi)容,很多人都有所了解.但從我搜索的內(nèi)容來看,他們只是略微看一下,根本不知道里面到底是什么情況.
    2011-06-06
  • MVC遇上bootstrap后的ajax表單驗證

    MVC遇上bootstrap后的ajax表單驗證

    這篇文章主要為大家詳細(xì)介紹了MVC遇上bootstrap后的ajax表單驗證,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • 使用Ajax局部更新Razor頁面的實例代碼

    使用Ajax局部更新Razor頁面的實例代碼

    Razor功能非常強大,但是本身并不能做到無刷新,所以需要配合ajax使用。本文通過一個例子給大家介紹使用Ajax局部更新Razor頁面,需要的朋友參考下吧
    2017-09-09
  • AJAX簡單異步通信實例分析

    AJAX簡單異步通信實例分析

    這篇文章主要介紹了AJAX簡單異步通信,實例分析了Ajax異步通信的技巧與相關(guān)注意事項,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03
  • Ajax 核心框架函數(shù)及例子

    Ajax 核心框架函數(shù)及例子

    最近學(xué)習(xí)js,肯定會學(xué)到ajax中的東西,所以,看到比較好的ajax函數(shù),免不得要貼出來,供大家參考。這個函數(shù)摘錄自john resig的書中。
    2009-09-09
  • 簡單實現(xiàn)ajax三級聯(lián)動效果

    簡單實現(xiàn)ajax三級聯(lián)動效果

    這篇文章主要教大家簡單實現(xiàn)ajax三級聯(lián)動效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • 基于Ajax技術(shù)實現(xiàn)無刷新用戶登錄功能

    基于Ajax技術(shù)實現(xiàn)無刷新用戶登錄功能

    這篇文章主要介紹了基于Ajax技術(shù)實現(xiàn)無刷新用戶登錄功能,非常不錯,具有參考借鑒價值,需要的的朋友參考下吧
    2017-01-01
  • Ajax請求超時與網(wǎng)絡(luò)異常處理圖文詳解

    Ajax請求超時與網(wǎng)絡(luò)異常處理圖文詳解

    最近在項目中遇到一個問題,當(dāng)加載數(shù)據(jù)量特別大的時候會出現(xiàn)加載超時現(xiàn)象,所以這篇文章主要給大家介紹了關(guān)于Ajax請求超時與網(wǎng)絡(luò)異常處理的相關(guān)資料,需要的朋友可以參考下
    2021-05-05
  • Ajax傳Jsond Mvc后臺接收實例

    Ajax傳Jsond Mvc后臺接收實例

    Ajax傳Jsond Mvc后臺接收,前后臺實現(xiàn)代碼如下,感興趣的朋友可以參考下哈,希望對大家有所幫助
    2013-06-06
  • ajax跨頁面提交表單

    ajax跨頁面提交表單

    這篇文章主要為大家詳細(xì)介紹了ajax跨頁面提交表單的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-10-10

最新評論