国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 開發(fā) > AJAX > 正文

純js實(shí)現(xiàn)瀑布流布局及ajax動(dòng)態(tài)新增數(shù)據(jù)

2024-09-01 08:33:43
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
這篇文章主要介紹了基于javascript實(shí)現(xiàn)瀑布流布局及ajax動(dòng)態(tài)新增數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下
 

本文用純js代碼手寫一個(gè)瀑布流網(wǎng)頁(yè)效果,初步實(shí)現(xiàn)一個(gè)基本的瀑布流布局,以及滾動(dòng)到底部后模擬ajax數(shù)據(jù)加載新圖片功能。

缺點(diǎn):

1. 程序不是響應(yīng)式,不能實(shí)時(shí)調(diào)整頁(yè)面寬度;

2. 程序中當(dāng)新增ajax模擬數(shù)據(jù)圖片后,是將整個(gè)頁(yè)面的所有圖片都重新定位一次。

3. 程序是等所有圖片加載完成后再讀取圖片的尺寸,實(shí)際中肯定不能這樣做。

4. 實(shí)際項(xiàng)目中,應(yīng)該由后臺(tái)程序給出圖片尺寸值,在js代碼中直接使用圖片的width屬性。 

本程序思路:

html結(jié)構(gòu):

<body>  <div id="container">    <div class="box">      <div class="box_img">        <img src="img/1.jpg" />      </div>    </div>    <div class="box">      <div class="box_img">        <img src="img/2.jpg" />      </div>    </div>    ...  </div></body> 

一、初始化布局

1. 設(shè)置#container為position:relative;

2. 設(shè)置.box為float:left;

3. 網(wǎng)頁(yè)加載后對(duì)所有圖片進(jìn)行定位;

  3.1 圖片寬度是固定的,計(jì)算出當(dāng)前頁(yè)面每行能容納的圖片數(shù)num,并得出#container的寬度,然后設(shè)置頁(yè)面居中;

  3.2 循環(huán)遍歷所有圖片,前num個(gè)圖片默認(rèn)float布局作為第一行,并存入數(shù)組BoxHeightArr = [];

  3.3 第一行布局完成后,排布下一個(gè)圖片,并更新BoxHeightArr[]:

    3.3.1 將下一個(gè)圖片放到第一行最矮圖片的下方(用position:absolute定位),也就是BoxHeightArr[]中高度最小的那一列,記錄下列數(shù)的索引值:minIndex;

    3.3.2 更新BoxHeightArr[]中最小的那個(gè)值(BoxHeightArr[minIndex]+當(dāng)前圖片的高度);

  3.4 重復(fù)循環(huán)3.3步驟,直到所有圖片都排布完成

二、實(shí)時(shí)監(jiān)測(cè)滾動(dòng)高度,是否要加載新數(shù)據(jù)

1.初始化完成后得到最后一個(gè)圖片距離頂部的高度: lastContentHeight

2.用window.onscroll = function(){...}

  實(shí)時(shí)監(jiān)測(cè)當(dāng)前頁(yè)面的滾動(dòng)高度為:scrollTop

  實(shí)時(shí)監(jiān)測(cè)當(dāng)前頁(yè)面視窗高度為:pageHeight

3. 當(dāng)頁(yè)面監(jiān)測(cè)到:lastContentHeight < scrollTop + pageHeight 時(shí),用ajax獲取新增圖片的json數(shù)據(jù)。

三、頁(yè)面底部新增內(nèi)容

1. 用一個(gè)循環(huán),先創(chuàng)建一個(gè)新的圖片容器,添加到底部,然后將json數(shù)據(jù)中相應(yīng)的圖片數(shù)據(jù)如路徑等信息寫入該容器完成添加圖片。

2. 所有新增圖片添加完成后,對(duì)整個(gè)頁(yè)面的所有圖片及布局重新執(zhí)行步驟一的初始化操作。

 項(xiàng)目文件夾:

 js,瀑布流,ajax

index.html: 預(yù)先置入部分圖片數(shù)據(jù)

<!DOCTYPE html><html> <head>  <meta charset="UTF-8">  <link rel="stylesheet" type="text/css" href="css/style.css"/>  <script src="js/app.js"></script>  <title>JavaScript瀑布流</title> </head> <body>  <div id="container">   <div class="box">    <div class="box_img">     <img src="img/1.jpg"/>    </div>   </div>   <div class="box">    <div class="box_img">     <img src="img/2.jpg"/>    </div>   </div>   <div class="box">    <div class="box_img">     <img src="img/3.jpg"/>    </div>   </div>   <div class="box">    <div class="box_img">     <img src="img/4.jpg"/>    </div>   </div>   <div class="box">    <div class="box_img">     <img src="img/5.jpg"/>    </div>   </div>   <div class="box">    <div class="box_img">     <img src="img/6.jpg"/>    </div>   </div>   <div class="box">    <div class="box_img">     <img src="img/7.jpg"/>    </div>   </div>   <div class="box">    <div class="box_img">     <img src="img/8.jpg"/>    </div>   </div>   <div class="box">    <div class="box_img">     <img src="img/9.jpg"/>    </div>   </div>   <div class="box">    <div class="box_img">     <img src="img/10.jpg"/>    </div>   </div>      <div class="box">    <div class="box_img">     <img src="img/1.jpg"/>    </div>   </div>   <div class="box">    <div class="box_img">     <img src="img/2.jpg"/>    </div>   </div>   <div class="box">    <div class="box_img">     <img src="img/3.jpg"/>    </div>   </div>   <div class="box">    <div class="box_img">     <img src="img/4.jpg"/>    </div>   </div>   <div class="box">    <div class="box_img">     <img src="img/5.jpg"/>    </div>   </div>   <div class="box">    <div class="box_img">     <img src="img/6.jpg"/>    </div>   </div>   <div class="box">    <div class="box_img">     <img src="img/7.jpg"/>    </div>   </div>   <div class="box">    <div class="box_img">     <img src="img/8.jpg"/>    </div>   </div>   <div class="box">    <div class="box_img">     <img src="img/9.jpg"/>    </div>   </div>     <div class="box">    <div class="box_img">     <img src="img/10.jpg"/>    </div>   </div>      <div class="box">    <div class="box_img">     <img src="img/1.jpg"/>    </div>   </div>   <div class="box">    <div class="box_img">     <img src="img/2.jpg"/>    </div>   </div>   <div class="box">    <div class="box_img">     <img src="img/3.jpg"/>    </div>   </div>   <div class="box">    <div class="box_img">     <img src="img/4.jpg"/>    </div>   </div>   <div class="box">    <div class="box_img">     <img src="img/5.jpg"/>    </div>   </div>   <div class="box">    <div class="box_img">     <img src="img/6.jpg"/>    </div>   </div>   <div class="box">    <div class="box_img">     <img src="img/7.jpg"/>    </div>   </div>   <div class="box">    <div class="box_img">     <img src="img/8.jpg"/>    </div>   </div>   <div class="box">    <div class="box_img">     <img src="img/9.jpg"/>    </div>   </div>   <div class="box">    <div class="box_img">     <img src="img/9.jpg"/>    </div>   </div>   <div class="box">    <div class="box_img">     <img src="img/10.jpg"/>    </div>   </div>  </div> </body></html>

style.css:

*{ margin: 0; padding: 0;}#container{ position: relative;}.box{ padding: 5px; float: left;}.box_img{ padding: 5px; border: 1px solid #ccc; box-shadow: 0 0 5px #ccc; border-radius: 5px;}.box_img img{ width: 150px; height: auto;} 

app.js:

window.onload = function(){ imgLocation("container", "box"); //ajax模擬數(shù)據(jù) var imgData = {"data":[{"src":"2.jpg"},{"src":"3.jpg"},{"src":"4.jpg"},{"src":"5.jpg"},{"src":"6.jpg"},{"src":"8.jpg"},{"src":"2.jpg"},{"src":"3.jpg"},{"src":"4.jpg"},{"src":"5.jpg"},{"src":"6.jpg"},{"src":"8.jpg"}]}  window.onscroll = function(){  if(checkFlag()){ //判斷是否到底部要加載新的數(shù)據(jù)   var cparent = document.getElementById("container");   //把a(bǔ)jax數(shù)據(jù)加載進(jìn)頁(yè)面   for(var i=0; i<imgData.data.length; i++){    var ccontent = document.createElement("div");    ccontent.className="box";    cparent.appendChild(ccontent);    var boximg = document.createElement("div");    boximg.className = "box_img";    ccontent.appendChild(boximg);    var img = document.createElement("img");    img.src = "img/"+imgData.data[i].src;    boximg.appendChild(img);   }   //把所有圖片數(shù)據(jù)重新定位一次   imgLocation("container", "box");  } }};function checkFlag(){ var cparent = document.getElementById("container"); var ccontent = getChildElement(cparent, "box");  //得到最后一張圖距頂部的高度,滾動(dòng)高度,窗口高度 var lastContentHeight = ccontent[ccontent.length-1].offsetTop; var scrollTop = document.documentElement.scrollTop || document.body.scrollTop; var pageHeight = document.documentElement.clientHeight || document.body.clientHeight; console.log(lastContentHeight+":"+scrollTop+":"+pageHeight);  if(lastContentHeight < scrollTop + pageHeight){  return true; }}function imgLocation(parent, content){ //將parent下所有的content全部取出 var cparent = document.getElementById(parent); var ccontent = getChildElement(cparent, content); //根據(jù)當(dāng)前瀏覽器窗口的寬度,確定每行圖片數(shù)并固定,居中 var imgWidth = ccontent[0].offsetWidth; //offsetWidth = width + padding + border var num = Math.floor(document.documentElement.clientWidth / imgWidth); cparent.style.cssText = "width:"+imgWidth*num+"px;margin:0 auto"; //alert("pause"); //設(shè)置一個(gè)數(shù)組,用來(lái)承載第一行的圖片信息 var BoxHeightArr = []; for(var i=0; i<ccontent.length; i++){  if(i<num){   //第一行的圖片的高度記錄下來(lái)   BoxHeightArr[i] = ccontent[i].offsetHeight;   //當(dāng)ajax數(shù)據(jù)加載后,程序是將所有圖片重新定位,所以第一行的圖片要清除position:absolute   ccontent[i].style.position = "static";  }else{   var minHeight = Math.min.apply(null, BoxHeightArr);   var minIndex = getminheightLocation(BoxHeightArr, minHeight);      //把圖放在第一行圖索引值最小的下面   ccontent[i].style.position = "absolute";   ccontent[i].style.top = minHeight+"px";   ccontent[i].style.left = ccontent[minIndex].offsetLeft+"px";      //圖片放好位置后更新“第一行圖片信息的最小高度”,   //然后利用for循環(huán)重復(fù)這個(gè)動(dòng)作到結(jié)束   BoxHeightArr[minIndex] = BoxHeightArr[minIndex] + ccontent[i].offsetHeight;  } };}//獲取第一行圖片高度最小的索引值function getminheightLocation(BoxHeightArr, minHeight){ for(var i in BoxHeightArr){  if(BoxHeightArr[i] == minHeight){   return i;  } }}//獲取所有boxfunction getChildElement(parent, content){ contentArr = parent.getElementsByClassName(content); return contentArr;}

效果圖:

js,瀑布流,ajax

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家學(xué)習(xí)javascript程序設(shè)計(jì)有所幫助。



注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到JavaScript/Ajax教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 崇左市| 日喀则市| 晋州市| 宝山区| 宾川县| 上栗县| 高要市| 四川省| 蕲春县| 靖江市| 马公市| 柳江县| 石狮市| 乌兰察布市| 八宿县| 五指山市| 迁西县| 长寿区| 刚察县| 剑阁县| 宾川县| 正安县| 松潘县| 施秉县| 仙游县| 东台市| 霍州市| 札达县| 讷河市| 柳林县| 上犹县| 体育| 山东省| 炉霍县| 临沧市| 贵港市| 宜春市| 宜州市| 康平县| 革吉县| 西丰县|