成果预览

//在所需应用瀑布流的页面监听resize window.onresize = function () {  waterFall();};//触发计算函数// perItem 为瀑布流的 每个盒子function waterFall() {  // await  setTimeout(() => {  var items = document.getElementsByClassName("perItem");  // }, 500);  var gap = 10;  //首先确定列数 = 页面的宽度 / 图片的宽度  var pageWidth = getClient().width;  var itemWidth = 550;  var columns = parseInt(pageWidth / (itemWidth + gap));  var arr = []; //定义一个数组,用来存储元素的高度  for (var i = 0; i < items.length; i++) {    if (i < columns) {      //满足这个条件则阐明在第一行,文章外面有提到      items[i].style.top = 0;      items[i].style.left = (itemWidth + gap) * i + "px";      arr.push(items[i].offsetHeight);    } else {      //其余行,先找出最小高度列,和索引      //假如最小高度是第一个元素      var minHeight = arr[0];      var index = 0;      for (var j = 0; j < arr.length; j++) {        //找出最小高度        if (minHeight > arr[j]) {          minHeight = arr[j];          index = j;        }      }      //设置下一行的第一个盒子的地位      //top值就是最小列的高度+gap      items[i].style.top = arr[index] + gap + "px";      items[i].style.left = items[index].offsetLeft + "px";      //批改最小列的高度      //最小列的高度 = 以后本人的高度 + 拼接过去的高度 + 间隙的高度      arr[index] = arr[index] + items[i].offsetHeight + gap;    }  }}function getClient() {  return {    width:      window.innerWidth ||      document.documentElement.clientWidth ||      document.body.clientWidth,    height:      window.innerHeight ||      document.documentElement.clientHeight ||      document.body.clientHeight,  };}