滚动的魅力:如何实现大厂也在用的瀑布流布局

瀑布流

定义

在一些主流的一些软件当中我们常常可以看见这样的一种布局,内容区块(如图片或卡片)按列从上至下排列,当一个内容区块排满一列时,下一个内容区块会填补下一行最短的列,以此类推,形成一种类似瀑布般错落有致的效果,也就是瀑布流布局(Masonry Layout 或瀑布流式布局) 下图的手机淘宝和小红书网站上都采用了这种布局,源码放在文章的最后面。

好处

瀑布流布局的好处主要包括以下几点:

  1. 空间利用率高:瀑布流布局能够根据内容的大小自动填充不同的列,有效地利用页面空间,避免了传统网格布局可能出现的大面积空白。

  2. 视觉吸引力强:瀑布流的不对称分布使得页面看起来富有变化和层次感,给用户带来新颖且有趣味性的视觉体验,有利于提升用户的关注度和参与度。

  3. 沉浸式浏览:用户只需要上下滚动屏幕即可连续不断地查看内容,流畅的滚动体验增强了用户沉浸式阅读或浏览的感觉,有助于延长用户在页面上的停留时间。

  4. 触屏设备友好:对于智能手机和平板电脑等触屏设备,瀑布流布局符合用户滑动浏览的习惯,减少了翻页操作,提高了移动端的浏览效率。

  5. 动态加载与个性化推荐:瀑布流布局便于实现"无限滚动",即当用户滚动到底部时自动加载更多内容,同时可以根据用户行为数据进行个性化推荐,进一步提升用户体验。

  6. 内容多样性展示:对于包含不同尺寸或类型内容的页面,瀑布流布局能很好地适应这些差异,将各种内容有机地结合在一起展示。

实现

使用一个父容器container,图片容器img包裹要展示的图片;通过js获取父容器的DOM结构,之后再获取其子元素图片容器img然后将其按照瀑布流的规则使用绝对定位放置;使用一个heightArr高度数组,在放置的时候记录每一列图片的高度,图片应该放置在高度最低的那一列。

1. html,css部分

先将图片容器.img设置为固定宽度,并设置展示方式为行内块display:inline-block,并将其对齐方式设置为 顶部对齐vertical-align:top,因为行内块默认是底部对齐;

图片设置宽度为父容器的100%

将图片容器放在父容器中

此时的页面

按照一行一行排列但是之间还是有空隙因为我们此时还没使用js来控制元素的位置,瀑布流主要就是通过js来控制图片的位置实现的

2.js部分

js的逻辑需要等待页面元素加载完成之后不然,也获取不到元素的DOM结构。咱们把js部分的主要逻辑写在window.onLoad()中。window.onload() 是 JavaScript 中的一个内置函数,它会在整个页面(包括所有资源如图片、脚本文件、样式表等)加载完毕后执行。换句话说,当浏览器完成解析 HTML 文档,并加载完页面内所有外部资源后,才会触发 window.onload 事件

1. 获取父容器以及所有的图片容器

通过控制台,打印结果获取成功

2.获取当前一行应该放置多少张图片num=math.floor(父容器宽度/子容器)

3.开始放置

调用start函数,传入图片容器数组,一行最多放置图片最大数量

start函数的定义,使用一个for循环遍历所有图片容器,定义一个高度数组存储每列图片的高度

第一行的图片先不管,将高度存储到数组heightArr中,从第二行开始,使用Math.min.apply(null,heightArr)获取高度数组中最小的值min,并使用数组自带的.indexOf方法获取min的下标minIndex

对此时遍历到的图片设置绝对定位,top设置为高度数组中的最小值min,left设置为minIndex*imgW 这样就将图片放置在了上一行图片的高度最低的地方

最后再更新一下高度数组的min的值

最终效果

点击获取源码

本人目前在准备春招,也希望和一起准备春招的佬们互相交流一下,一起冲刺大厂,欢迎私信评论或加v:guanyiiu1314

相关推荐
Json_1817901448012 分钟前
电商拍立淘按图搜索API接口系列,文档说明参考
前端·数据库
大数据编程之光18 分钟前
Flink Standalone集群模式安装部署全攻略
java·大数据·开发语言·面试·flink
风尚云网35 分钟前
风尚云网前端学习:一个简易前端新手友好的HTML5页面布局与样式设计
前端·css·学习·html·html5·风尚云网
木子020438 分钟前
前端VUE项目启动方式
前端·javascript·vue.js
GISer_Jing40 分钟前
React核心功能详解(一)
前端·react.js·前端框架
捂月43 分钟前
Spring Boot 深度解析:快速构建高效、现代化的 Web 应用程序
前端·spring boot·后端
深度混淆1 小时前
实用功能,觊觎(Edge)浏览器的内置截(长)图功能
前端·edge
Smartdaili China1 小时前
如何在 Microsoft Edge 中设置代理: 快速而简单的方法
前端·爬虫·安全·microsoft·edge·社交·动态住宅代理
秦老师Q1 小时前
「Chromeg谷歌浏览器/Edge浏览器」篡改猴Tempermongkey插件的安装与使用
前端·chrome·edge
滴水可藏海1 小时前
Chrome离线安装包下载
前端·chrome