本篇文章介绍JS原生瀑布流效果的实现方法。 HTML 和CSS div id=main//一个main包含了整个页面内容,box用来做一个外容器,img作为图片容器 div class=box div class=pic img src=img/0.jpg /div /div div class=box div class=pic img src=img/0.jpg /div /d
本篇文章介绍JS原生瀑布流效果的实现方法。 HTML 和CSS
JS代码 在我们写JS代码之前,我们需要搞明白我们需要什么方法,是否需要封装起来调用,我们第一步要干什么, 那么我们第一步要干什么呢?我们做瀑布流首先要做的是获取到所有小部件也就是box,我们无论做什么处理都是对box的处理或者img的处理,所以要获取到所有的box,所以我们可以把它封装起来
这样我们就得到了我们想要的class,之后该怎么办呢,先从一个box下手,我们需要取得第一排到底有多少个元素,因为之前我们并没有确定我们main的宽度,所以是自适应的也就是说我们把页面缩小,我们每一排的元素也会相应的减少,为了能让瀑布流的代码有更好的应用性,让不同尺寸的图片都可以应用,所以,我们需要手动计算一排究竟可以放多少张图片呢,那如何计算呢? 我们可以算出页面总宽在box的宽,就OK了 var oBoxW=oBoxs[0].offsetWidth;//box的宽,提到了里面计算了padding的值 var clos=Math.floor(document.documentElement.clientWidth/oBoxW)//求列数 这样我们就求出了列数,无论图片的宽度如何变,我们都可以算出来 floor是用来取整数的,因为我们的px是没有浮点数类型的避免计算错误,所以取整 oparent.style.cssText='width:'+oBoxW*clos+'px; margin :0 auto'; 设置main的宽度 我们已经取得了列数之后呢我们第一排的图片肯定是一排宽度相等,长度不一是吧,也就是说,我们第二排的图片需要接上第一排图片的后边,我们不能一排一排操作,但我们可以一个一个操作,怎么操作呢,我们可以取到第一排高度最小的将下一张图片,也就是如果第一排7个,那下一个就是第八个,把第八个图片放在最小高度的图片上,如何实现呢,我们先试想一下,我们首先需要求出第一排中最小,我们有一个Math.min求最小,但是呢我们这个函数无法传入用数组,只能是具体的数怎么半呢,apply来扩展作用域 用代码展示下
以上就大体做出了一个瀑布流的样式,就差拖动滚动条加载了,这里面肯定需要后台的支持,在慕课上,老师做了一个伪处理,这里建议看慕课视频,有图解十分清楚,我用语言或图片不太好表达
完整JS代码
|
2021-06-04
2019-01-10
2019-02-17
2021-09-12
2021-09-30