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

首頁 > 編程 > JavaScript > 正文

用JavaScript和jQuery實現瀑布流

2019-11-19 17:07:02
字體:
來源:轉載
供稿:網友

大致介紹

在慕課網上學習了用原生js和jQuery實現瀑布流,在這里做個筆記

用JavaScript實現

基本結構:

<div id="main"> <div class="box">  <div class="pic"><img src="images/1.jpg" alt=""></div> </div> <div class="box">  <div class="pic"><img src="images/2.jpg" alt=""></div> </div>  ...  ...  ... </div>

基本樣式:

*{ margin: 0px; padding: 0px; } #main{ position: relative; } .box{ padding: 15px 0 0 15px; float: left; } .pic{ padding: 10px; border: 1px solid #ccc; border-radius: 5px; box-shadow: 0 0 5px #ccc; }

思路:

1、獲取#main下的所有.box

2、計算頁面中圖片有幾列,并設置頁面的寬度

3、找出這幾列中高度最小的列

4、從第二行開始,設置圖片為相對定位,把一張圖片放到高度最小列的下面

5、更新列的高度,重復3、4、5步驟,直至圖片加載完

6、根據最后一張圖片的位置確定是否繼續加載圖片(懶加載)

實現:

1、獲取#main下的所有.box

  //將main下的所有class為box的元素取出來  var oParent = document.getElementById(parent);  var oBox = getByClass(oParent,box);
// 根據class獲取元素 function getByClass(parent,clsname){  var arr = [];//用來存儲獲取到的所有class為box的元素  var oElement = parent.getElementsByTagName('*');  for(var i=0;i<oElement.length;i++){  if(oElement[i].className == clsname){   arr.push(oElement[i]);  }  }  return arr; }

2、計算頁面中圖片有幾列,并設置頁面的寬度

  //計算整個頁面顯示的列數(頁面寬/box的寬)  var oBoxW = oBox[0].offsetWidth;  var cols = Math.floor(document.documentElement.clientWidth/oBoxW);  //設置main的寬  oParent.style.cssText = 'width:' + oBoxW*cols + 'px;margin:0 auto;'; 

3、找出這幾列中高度最小的列

4、從第二行開始,設置圖片為相對定位,把一張圖片放到高度最小列的下面

5、更新列的高度,重復3、4、5步驟,直至圖片加載完

//存儲每列的高度  var hArr = [];  for(var i=0;i<oBox.length;i++){  if(i<cols){   //第一行圖片的高度   hArr.push(oBox[i].offsetHeight);  }else{   var minH = Math.min.apply(null,hArr);   var index = getMinIndex(hArr,minH);   oBox[i].style.position = "absolute";   oBox[i].style.top = minH + 'px';   //oBox[i].style.left = oBoxW*index+'px';   oBox[i].style.left = oBox[index].offsetLeft + 'px';   //更新每列的高度   hArr[index] += oBox[i].offsetHeight;  }  }
//獲取每列高度最小的索引值 function getMinIndex(arr,value){  for(var i in arr){  if(arr[i] == value){   return i;  }  } }

6、根據最后一張圖片的位置確定是否繼續加載圖片(懶加載)

假設是后臺給的數據

  //數據  var dataInt = {'data':[{'src':'1.jpg'},{'src':'2.jpg'},{'src':'3.jpg'},{'src':'4.jpg'}]};  

當滾動條滾動時執行

  //滾動條滾動時  window.onscroll = function(){  scrollSlide(dataInt);  }  

根據最后一張圖片的位置,來判斷是否進行加載

//判斷是否具有了滾條加載數據塊的條件 function checkScrollSlide(parent,clsname){  var oParent = document.getElementById(parent);  var oBox = getByClass(oParent,clsname);  var lastBoxH = oBox[oBox.length-1].offsetTop + Math.floor(oBox[oBox.length-1].offsetHeight/2);  var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;  var height = document.documentElement.clientHeight || document.body.clientHeight;  return (lastBoxH < scrollTop + height)? true:false; }

加載圖片

//滾動條滾動時執行 function scrollSlide(dataInt){  ////判斷是否具有了滾條加載數據塊的條件  if(checkScrollSlide('main','box')){  var oParent = document.getElementById('main');  //將數據塊渲染到當前頁面的尾部  for(var i=0;i<dataInt.data.length;i++){   var oBoxs = document.createElement('div');   oBoxs.className = 'box';   oParent.appendChild(oBoxs);   var oPic = document.createElement('div');   oPic.className = 'pic';   oBoxs.appendChild(oPic);   var oImg = document.createElement('img');   oImg.src = 'images/' + dataInt.data[i].src;   oPic.appendChild(oImg);  }  waterfall('main','box');  }

用jQurey實現

用jQuery實現的思路都是一樣的,就直接放代碼

$(window).on('load',function(){  waterfall();  var dataInt={'data':[{'src':'1.jpg'},{'src':'2.jpg'},{'src':'3.jpg'},{'src':'4.jpg'}]};  $(window).on('scroll',function(){  scrollSlide(dataInt);  }) }); function waterfall(){  var $oBox = $('#main>div');  var oBoxW = $oBox.eq(0).outerWidth();  var cols = Math.floor($(window).width()/oBoxW);  $('#main').css({  'width' : cols * oBoxW,  'margin' : '0 auto'  });  var hArr = [];  $oBox.each(function(index,value){  var oBoxH = $oBox.eq(index).height();  if(index<cols){   hArr.push(oBoxH);  }else{   var minH = Math.min.apply(null,hArr);   var minHIndex = $.inArray(minH,hArr);   $(value).css({   'position' : 'absolute',   'top': minH + 15,   'left' : $oBox.eq( minHIndex ).position().left   });   hArr[minHIndex] += $oBox.eq(index).height() + 15;  }  }); } function checkScrollSlide(){  var $lastBox = $('#main>div').last();  var lastBoxH = $lastBox.offset().top + Math.floor($lastBox.height()/2);  var scrollTop = $(window).scrollTop();  var clientH = $(window).height();  return (lastBoxH < scrollTop + clientH) ? true : false; } function scrollSlide(dataInt){  if(checkScrollSlide()){  $.each(dataInt.data,function(index,value){   var $Box = $('<div>').addClass('box').appendTo('#main');   var $Pic = $('<div>').addClass('pic').appendTo($Box);   $('<img>').attr('src','images/' + $(value).attr('src')).appendTo($Pic);  })  waterfall();  } }

以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持武林網!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 海丰县| 盘锦市| 象州县| 新安县| 都安| 银川市| 宁强县| 阿瓦提县| 余姚市| 鸡西市| 施秉县| 双城市| 于都县| 札达县| 兴海县| 宁南县| 达日县| 舞阳县| 云霄县| 平舆县| 泗水县| 娄烦县| 合江县| 蕉岭县| 铜山县| 塘沽区| 烟台市| 韩城市| 娄底市| 永川市| 丰台区| 穆棱市| 敦化市| 丹江口市| 永昌县| 合作市| 绿春县| 若尔盖县| 济南市| 聂拉木县| 宽城|