JS 瀑布流
发布日期:2021-05-18 04:36:12 浏览次数:19 分类:精选文章

本文共 2041 字,大约阅读时间需要 6 分钟。

JS 瀑布流布局

瀑布流是一种形象的称呼,大小不一的盒子就像拼图一样拼接而成,形成瀑布效果。这种布局常见于个人博客和图片素材网站。

效果图

虽然无法直接看到效果图,但可以想象:图片和文字-content以瀑布流的形式排列,形成一幅美观的画面。

原理

布局的原理是:将盒子设置为绝对定位,子绝父相布局。通过JavaScript动态调整图片的位置。当图片铺完第一行后,设置left:0,从左边开始,利用判断语句查询最小高度的那列,然后将图片放置到该列。如此往复,就像拼图一样,形成瀑布流。

代码

* { margin: 0; padding: 0; }body { width: 100%; background-color: #eee; font-size: 10px; }.all { width: 87em; position: relative; margin: 10px auto 0; }.imgbox { width: 29em; background-color: #fafafa; box-sizing: border-box; position: absolute; box-shadow: 0 0 10px #999; }img { width: 29em; display: block; }ッド article { width: 23em; font-size: 0.8em; line-height: 2.6em; margin: 30px auto; }
function waterfall() {  var imgbox = document.getElementsByClassName('imgbox');  var margin_top = 5; //第一列 margin-top  var margin_top2 = 5; //第二列 margin-top  var margin_top3 = 5; //第三列 margin-top  var arr = [0, 0, 0];  for (var i = 0; i < imgbox.length; i++) {    var min = Math.min.apply(null, arr);    var column = arr.indexOf(min);    if (column == 0) {      arr[column] = min + imgbox[i].offsetHeight;      imgbox[i].style.left = '0px';      if (i > 2) {        imgbox[i].style.top = arr[column] - imgbox[i].offsetHeight + margin_top + 'px';        margin_top += 5;      }    } else if (column == 1) {      arr[column] = min + imgbox[i].offsetHeight;      imgbox[i].style.left = imgbox[i - 1].offsetWidth + 5 + 'px';      if (i > 2) {        imgbox[i].style.top = arr[column] - imgbox[i].offsetHeight + margin_top2 + 'px';        margin_top2 += 5;      }    } else if (column == 2) {      arr[column] = min + imgbox[i].offsetHeight;      imgbox[i].style.left = imgbox[i - 1].offsetWidth + imgbox[i - 2].offsetWidth + 10 + 'px';      if (i > 2) {        imgbox[i].style.top = arr[column] - imgbox[i].offsetHeight + margin_top3 + 'px';        margin_top3 += 5;      }    }  }}window.onload = function() {  waterfall();};

思路

1、获取imgbox元素的大小,使用offsetWidthoffsetHeight。2、创建一个数组arr = [0, 0, 0],记录每列的高度。3、利用<codeMath.min。apply()找到最小值。4、通过indexOf找到最小值所在列。5、循环处理,每列元素的位置。

这种布局适合图片和文字-content混合布局,效果简洁且实用。

上一篇:JS日历
下一篇:手风琴特效这么简单还不赶紧来学?

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2025年04月18日 12时22分23秒