
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
元素的大小,使用offsetWidth
和offsetHeight
。2、创建一个数组arr = [0, 0, 0]
,记录每列的高度。3、利用<codeMath.min。apply()找到最小值。4、通过indexOf
找到最小值所在列。5、循环处理,每列元素的位置。 这种布局适合图片和文字-content混合布局,效果简洁且实用。
发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2025年04月18日 12时22分23秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
python里面读取文件和保存文件的路径
2019-03-16
对汇编中一些基础知识的理解
2019-03-16
计网复习3
2019-03-16
Mybatis 中$和#千万不要乱用!
2019-03-16
SQL注入access数据库
2019-03-16
MyBatis拦截器原理探究
2019-03-16
JDK动态代理的实现原理
2019-03-16
Spring Security 架构与源码分析
2019-03-16
数据:FIT2CLOUD飞致云连续进入云管理软件市场权威研究报告
2019-03-16
教程丨使用MeterSphere做Dubbo接口测试
2019-03-16
使用分享丨MeterSphere平台上的SSL证书配置
2019-03-16
【毕设-STM32f103寄存器版本】智能防盗系统
2019-03-16
勒索病毒Kraken2.0.7分析
2019-03-16
ACwing 858. Prim算法求最小生成树
2019-03-16
用心理解设计模式——桥接模式 / 桥梁模式 (Bridge Pattern)
2019-03-16
Java浅拷贝和深拷贝的区别和原因
2019-03-16
Python numpy ndarray加减乘除 矩阵乘 简洁版
2019-03-16
Java反射机制生成实例和普通实话化对比
2019-03-16