亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > AJAX > 正文

純js實現瀑布流布局及ajax動態新增數據

2024-09-01 08:33:43
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了基于javascript實現瀑布流布局及ajax動態新增數據的相關資料,需要的朋友可以參考下
 

本文用純js代碼手寫一個瀑布流網頁效果,初步實現一個基本的瀑布流布局,以及滾動到底部后模擬ajax數據加載新圖片功能。

缺點:

1. 程序不是響應式,不能實時調整頁面寬度;

2. 程序中當新增ajax模擬數據圖片后,是將整個頁面的所有圖片都重新定位一次。

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

4. 實際項目中,應該由后臺程序給出圖片尺寸值,在js代碼中直接使用圖片的width屬性。 

本程序思路:

html結構:

<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. 設置#container為position:relative;

2. 設置.box為float:left;

3. 網頁加載后對所有圖片進行定位;

  3.1 圖片寬度是固定的,計算出當前頁面每行能容納的圖片數num,并得出#container的寬度,然后設置頁面居中;

  3.2 循環遍歷所有圖片,前num個圖片默認float布局作為第一行,并存入數組BoxHeightArr = [];

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

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

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

  3.4 重復循環3.3步驟,直到所有圖片都排布完成

二、實時監測滾動高度,是否要加載新數據

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

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

  實時監測當前頁面的滾動高度為:scrollTop

  實時監測當前頁面視窗高度為:pageHeight

3. 當頁面監測到:lastContentHeight < scrollTop + pageHeight 時,用ajax獲取新增圖片的json數據。

三、頁面底部新增內容

1. 用一個循環,先創建一個新的圖片容器,添加到底部,然后將json數據中相應的圖片數據如路徑等信息寫入該容器完成添加圖片。

2. 所有新增圖片添加完成后,對整個頁面的所有圖片及布局重新執行步驟一的初始化操作。

 項目文件夾:

 js,瀑布流,ajax

index.html: 預先置入部分圖片數據

<!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模擬數據 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()){ //判斷是否到底部要加載新的數據   var cparent = document.getElementById("container");   //把ajax數據加載進頁面   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);   }   //把所有圖片數據重新定位一次   imgLocation("container", "box");  } }};function checkFlag(){ var cparent = document.getElementById("container"); var ccontent = getChildElement(cparent, "box");  //得到最后一張圖距頂部的高度,滾動高度,窗口高度 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); //根據當前瀏覽器窗口的寬度,確定每行圖片數并固定,居中 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"); //設置一個數組,用來承載第一行的圖片信息 var BoxHeightArr = []; for(var i=0; i<ccontent.length; i++){  if(i<num){   //第一行的圖片的高度記錄下來   BoxHeightArr[i] = ccontent[i].offsetHeight;   //當ajax數據加載后,程序是將所有圖片重新定位,所以第一行的圖片要清除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循環重復這個動作到結束   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

以上就是本文的全部內容,希望對大家學習javascript程序設計有所幫助。



注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美精品久久久久久久久久| 国产三级精品网站| 亚洲欧美中文日韩在线| 日本欧美一级片| 久热精品视频在线观看| 国产一区二区三区在线看| 91av在线免费观看视频| 亚洲视频在线播放| 亚洲高清免费观看高清完整版| 欧美高清性猛交| 91sao在线观看国产| 日韩精品视频在线播放| 国产精品一区二区女厕厕| 国产成人精品一区二区在线| 亚洲国产欧美一区二区三区同亚洲| 国产精品永久在线| 亚洲视频国产视频| 狠狠久久五月精品中文字幕| 在线视频欧美日韩精品| 国产在线播放不卡| 一区二区在线视频播放| 不卡毛片在线看| 日日狠狠久久偷偷四色综合免费| 国产视频亚洲精品| 国产精品久久久久久久久久久久久久| 亚洲品质视频自拍网| 97在线看免费观看视频在线观看| 久久久国产一区| 欧美大尺度在线观看| 欧美乱大交xxxxx另类电影| 日韩精品免费视频| 日韩精品www| 亚洲免费伊人电影在线观看av| 国产精品久久一区| 国产香蕉精品视频一区二区三区| 欧美在线亚洲在线| 国产成人精品综合久久久| 在线观看欧美成人| 91在线看www| 色播久久人人爽人人爽人人片视av| 久久激情视频久久| 欧美视频在线观看免费网址| 中文字幕亚洲欧美在线| 亚洲精品一区二三区不卡| 国产精品吹潮在线观看| 国产日本欧美在线观看| 久久99热精品这里久久精品| 91精品在线播放| 欧美伊久线香蕉线新在线| 欧美日韩精品中文字幕| 国产精品电影网| 中国人与牲禽动交精品| 亚洲人成在线观| 成人国产在线激情| 久久精品中文字幕一区| 国产精品 欧美在线| 国产欧美一区二区三区四区| 国产91|九色| 国产精品久久电影观看| 国产欧美精品xxxx另类| 国产精品人人做人人爽| 国产精品日韩电影| 在线亚洲国产精品网| 日韩精品中文字幕久久臀| 久久久久久免费精品| 国产午夜精品免费一区二区三区| 日韩激情av在线播放| 国自产精品手机在线观看视频| xxav国产精品美女主播| 日韩高清电影好看的电视剧电影| 国产精品久久久久久影视| 成人疯狂猛交xxx| 国产精品久久视频| 国产精品99久久99久久久二8| 色噜噜国产精品视频一区二区| 国产精品pans私拍| 国内外成人免费激情在线视频网站| 国产原创欧美精品| 在线观看欧美成人| 亚洲国产中文字幕久久网| 亚洲欧美日韩爽爽影院| 国产精品久久久久久久9999| 一区二区三区视频观看| 久久伊人精品一区二区三区| 国产精品自拍视频| 亚洲综合成人婷婷小说| 91欧美精品午夜性色福利在线| 欧美老女人性生活| 国产精品欧美在线| 国产欧美一区二区| 91精品久久久久| 日韩欧美在线视频日韩欧美在线视频| 国产精品久久久久91| 色综合久久久888| 亚洲欧洲日韩国产| 久久久精品一区| 欧美高清视频免费观看| 日韩在线免费视频观看| 日韩中文第一页| 国产精品久久久久久久久久久久| 国产精品久久久久久婷婷天堂| 亚洲美女在线看| 中文字幕欧美专区| 亚洲中国色老太| 国产不卡一区二区在线播放| 亚洲精品日韩在线| 欧美激情第三页| 久久精品国产精品亚洲| 欧美精品制服第一页| 欧美一级免费看| 日韩欧美大尺度| 91视频-88av| 91精品久久久久久久久青青| 欧美日韩在线第一页| 色婷婷**av毛片一区| 久久久精品久久| 精品亚洲va在线va天堂资源站| 色诱女教师一区二区三区| 欧美另类暴力丝袜| 日韩中文字幕网站| 日韩在线高清视频| 日韩av中文字幕在线免费观看| 国语自产精品视频在线看一大j8| 国产精品亚洲美女av网站| 日韩中文字幕在线免费观看| 欧美性猛交99久久久久99按摩| 欧美肥老妇视频| 成人av在线亚洲| 日韩女在线观看| 国产精品旅馆在线| 国产精品欧美在线| 国产精品自拍网| 精品自在线视频| 国产美女扒开尿口久久久| 色综合久久中文字幕综合网小说| 亚洲自拍偷拍第一页| 亚洲网站视频福利| 亚洲国产欧美一区二区三区同亚洲| 中文字幕精品久久久久| 91国内在线视频| 日韩欧美成人精品| 亚洲精品一区二区网址| 日韩人在线观看| 午夜精品99久久免费| 久久久国产精品亚洲一区| 美女精品久久久| 欧美日韩激情视频| 97高清免费视频| 亚洲欧美日韩第一区| 亚洲欧美自拍一区| 国产精品老女人视频| 亚洲人成在线电影| 欧美极品美女视频网站在线观看免费| 91在线视频成人| 精品一区二区三区四区在线| 在线观看亚洲视频| 日韩av在线免费| 亚洲视屏在线播放| 国产精品视频xxx| 69视频在线免费观看| 国产成人精品久久亚洲高清不卡| 国产亚洲欧美另类中文| 在线成人中文字幕| 欧美日韩性视频|