利用JavaScript怎么实现一个瀑布流效果

  介绍

利用JavaScript怎么实现一个瀑布流效果?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

JavaScript是什么

JavaScript是一种直译式的脚本语言,其解释器被称为JavaScript引擎,是浏览器的一部分,JavaScript是被广泛用于客户端的脚本语言,最早是在HTML网页上使用,用来给HTML网页增加动态功能。

& lt; div  id=癿ain"在//一个主要包含了整个页面内容,用盒子来做一个外容器,img作为图片容器   & lt;才能div 类=癰ox"比;   ,,& lt; div 类=皃ic"比;   ,,,& lt; img  src=https://www.yisu.com/zixun/癷mg/0. jpg”>   
  
  
  
  ,//css   ,//这里面的填充用填充值,因为offsetHeight是包括一个填充而不包括保证金的方便以后高度的测量   * {   ,保证金:0 px;   ,填充:0 px;   }   #{主要   ,位置:相对;//在主要上设置相对定位,在JS给框设置绝对定位,来控制图片位置   }   .box {   ,填充:15 px  0, 0, 15 px,,   ,浮动:左;   }   .pic {   ,填充:10 px;   ,边界:1 px  solid  # ccc;   ,这个特性:5 px;   ,不必:0,0,5 px  # ccc;   }   .pic  img {   ,宽度:168 px;//瀑布流统一宽度但不同一高度,高度为自适应就好   高度:大敌;汽车;   }

JS代码

在我们写JS代码之前,我们需要搞明白我们需要什么方法,是否需要封装起来调用,我们第一步要干什么,
那么我们第一步要干什么呢?我们做瀑布流首先要做的是获取到所有小部件也就是盒子,我们无论做什么处理都是对盒子的处理或者img的处理,所以要获取到所有的盒子,所以我们可以把它封装起来

//根据类获取元素   clsName function  getByClass(父){//传入父元素和想要的类   ,var  boxArr=new //用数组来存储获取到所有类为盒子的元素,可以用对象的方式也可以用[]创建   ,oElements=parent.getElementsByTagName(& # 39; * & # 39;);//取出所有子元素   ,for  (var 小姐:=,0;,小姐:& lt;, oElements.length;,我+ +),{//我们需要遍历所有的子元素   如果才能(oElements[我].className==clsName)//如果我们找到了相应的子元素   ,,boxArr.push (oElements[我]);//取出传过来相等的名称   ,,//推是数组自带的方法   ,};   ,return  boxArr返回数组   }

这样我们就得到了我们想要的类,之后该怎么办呢,先从一个框下的手,我们需要取得第一排到底有多少个元素,因为之前我们并没有确定我们主要的宽度,所以是自适应的也就是说我们把页面缩小,我们每一排的元素也会相应的减少,为了能让瀑布流的代码有更好的应用性,让不同尺寸的图片都可以应用,所以,我们需要手动计算一排究竟可以放多少张图片呢,那如何计算呢?
我们可以算出页面总宽在框的宽,就好了

, var oBoxW=oBoxs [0] .offsetWidth;//框的宽,提到了里面计算了填充的值
,var秘密地=Math.floor (document.documentElement.clientWidth/oBoxW)//求列数
,这样我们就求出了列数,无论图片的宽度如何变,我们都可以算出来
,地板是用来取整数的,因为我们的px是没有浮点数类型的避免计算错误,所以取整
,oparent.style.cssText=& # 39;宽度:& # 39;+ oBoxW *秘密地+ & # 39;px;保证金:0 # 39;汽车;
,设置主要的宽度

我们已经取得了列数之后呢我们第一排的图片肯定是一排宽度相等,长度不一是吧,也就是说,我们第二排的图片需要接上第一排图片的后边,我们不能一排一排操作,但我们可以一个一个操作,怎么操作呢,我们可以取到第一排高度最小的将下一张图片,也就是如果第一排7个,那下一个就是第八个,把第八个图片放在最小高度的图片上,如何实现呢,我们先试想一下,我们首先需要求出第一排中最小,我们有一个数学。敏求最小,但是呢我们这个函数无法传入用数组,只能是具体的数怎么半呢,申请来扩展作用域
用代码展示下

var 冷雾=[];//每一列高度的值   ,for  (var 小姐:=,0;,小姐:& lt;, oBoxs.length;,我+ +),{   如果才能(i<秘密地){//先记录好第一排高度   ,,hArr.push (oBoxs[我].offsetHeight);//放进去   其他,,}{//如果到达第二排,就开始计算   ,,var 明=Math.min.apply(数学、冷雾);最小值计算   ,,//为什么可以呢,本来不能传数组,我们通过应用绑定作用域在数学上,也就是说还是执行这个函数但是,应用第二个参数需要是数组,所以间接地把参数变成了数组传进的去,也就是说我们还是用了数学函数但值变成了数组里的值。   ,,//console.log(明)   ,,var 指数=getMinhIndex(冷雾,明)//获取索引   ,,oBoxs[我].style.position=癮bsolute",我们就可以找到,传入数组和最小值   ,,oBoxs[我].style.top=明+“px",那下一张图片的高度救球出来了   ,,oBoxs[我].style.left=oBoxW *指数+“px";左边的距离就是索引乘以元素的宽   ,,冷雾(指数)+=oBoxs[我].offsetHeight;//我们添加了一个图片后需要刷新数组里的高度,再去寻找下一个最小的,再向他的下面添加图片,一次循环   ,,}   ,};   val function  getMinhIndex  (arr) {   ,(var 小姐:拷贝arr){//在其中找到最小值,返回索引   如果才能(arr[我]==val) {   ,,return 我;   ,,}   ,}   }

利用JavaScript怎么实现一个瀑布流效果