1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113
   | window.addEventListener("load",function(event){     //1.实现瀑布流布局     waterFall("main", "box");
      //2.加载数据     window.addEventListener("scroll",function(){         if(check()){             //创建一个图片数组             imgArr = [                 {"src":"1.jpeg"},                 {"src":"3.jpeg"},                 {"src":"6.jpeg"},                 {"src":"5.jpeg"},                 {"src":"4.jpeg"},                 {"src":"9.jpeg"},             ];
              //遍历数组,拼接图片             for(var i = 0; i<imgArr.length; i++){                 var newBox = document.createElement("div")                 newBox.className = "box";                 tool.$('main').appendChild(newBox);
                  var newPic = document.createElement("div")                 newPic.className = "pic";                 newBox.appendChild(newPic);
                  var newImg = document.createElement("img")                 newImg.src = "../images/" + imgArr[i].src;                 newPic.appendChild(newImg);             }
              //重新进行瀑布流布局             waterFall("main", "box")         }     }) })
 
  // 实现瀑布流布局 function waterFall(parent, child){     //实现父盒子居中     //先取出所有盒子     var allBoxs = tool.$(parent).getElementsByClassName(child);     // console.log(allBoxs);     //拿到子盒子的宽度     var boxWidth = allBoxs[0].offsetWidth;     //获取文档的宽度     var srceenW = document.documentElement.clientWidth || document.body.clientWidth;     //求出列数     var cols = parseInt(srceenW/boxWidth)     //实现居中     tool.$(parent).style.width = cols * boxWidth + "px";     tool.$(parent).style.margin = '0 auto';
 
      //子盒子定位     //定义变量     var heightArr = [], boxHeight = 0, minBoxHeight = 0, minBoxIndex = 0;     for(var i=0;i<allBoxs.length;i++){         boxHeight = allBoxs[i].offsetHeight;         //判断是否是第一行         if(i < cols){             heightArr.push(boxHeight);         }else{             //剩余行             //取出数组中最矮的             minBoxHeight = getMinBoxHeight(heightArr);             minBoxIndex = getMinBoxIndex(heightArr, minBoxHeight);             //把盒子追加到最矮的盒子             allBoxs[i].style.position = 'absolute';             allBoxs[i].style.top = minBoxHeight + 'px';             allBoxs[i].style.left = minBoxIndex * boxWidth + 'px';             //更新高度             heightArr[minBoxIndex] += boxHeight;         }         // console.log(minBoxHeight, minBoxIndex)     } }
  function getMinBoxHeight(arr){     var min = arr[0];     for(var i = 1; i < arr.length; i++) {         var cur = arr[i];         cur < min ? min = cur : null     }     return min; }
  function getMinBoxIndex(arr, val){     for(var i = 0; i < arr.length; i++){         if(arr[i] === val){             return i;         }     } }   //判断是否加载数据 function check(){     //获取最后一个盒子     var allBoxs = tool.$('main').getElementsByClassName('box');     var lastBox = allBoxs[allBoxs.length - 1];
      //求最后盒子高度的一半     var lastBoxDis = lastBox.offsetHeight * 0.5 + lastBox.offsetTop;     //求页面高度     var srceenH = document.documentElement.clientHeight || document.body.clientHeight;     //求出页面滚出浏览器的高度     var scrollTopH = tool.scroll().top;     console.log(srceenH,scrollTopH)          return lastBoxDis <= srceenH + scrollTopH; }
  |