首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

js 移动端瀑布流

一、基础概念

  1. 瀑布流布局
    • 瀑布流是一种页面布局方式,以多列的形式按照一定规则排列内容(如图片、文字块等)。在移动端,由于屏幕尺寸相对较小,瀑布流布局能够有效地利用屏幕空间,提供丰富的视觉体验。
    • 它的特点是内容块的高度可以不同,并且会根据列的高度动态地排列到最短的列上,使得整体布局看起来错落有致。
  • JavaScript实现原理
    • 测量每个内容块(例如图片)的高度(在图片加载完成后准确获取)。
    • 维护多列(通常是两列或三列,根据屏幕宽度确定)的容器,并记录每列已经占用的总高度。
    • 将新的内容块添加到当前总高度最小的列中。

二、优势

  1. 视觉吸引力
    • 独特的布局方式使页面看起来更具层次感和现代感,吸引用户的注意力。
  • 空间利用高效
    • 在有限的屏幕空间内展示更多的内容,减少滚动次数。
  • 适应不同内容长度
    • 不同高度的内容块可以灵活排列,不需要统一内容的格式。

三、类型

  1. 简单瀑布流
    • 仅按照固定的列数进行排列,不考虑内容之间的关联性等其他因素。
  • 响应式瀑布流
    • 根据移动设备的屏幕大小动态调整列数,例如在小屏幕设备上显示一列或两列,在大屏幕设备上显示更多列。

四、应用场景

  1. 图片展示网站
    • 如摄影作品集网站,以美观的方式展示大量的图片。
  • 新闻资讯类应用
    • 以卡片形式展示新闻标题、图片和摘要,方便用户快速浏览。
  • 电商产品展示页面
    • 展示商品图片、名称和价格等信息。

五、可能遇到的问题及解决方法

  1. 图片加载导致的布局抖动
    • 问题原因:如果图片没有预先设置宽高,在图片加载完成后才确定实际大小,可能会导致已经排好序的布局被打乱。
    • 解决方法:在HTML中为图片元素设置固定的宽高比例(例如通过设置padding - bottom来模拟高度,根据宽度按比例计算),或者使用JavaScript在图片加载前预先设置一个占位大小。
    • 示例代码(预先设置占位大小):
    • 示例代码(预先设置占位大小):
  • 性能问题(大量图片时)
    • 问题原因:当有大量的图片需要按照瀑布流布局加载时,频繁地操作DOM(如插入新的图片元素到不同的列)会导致性能下降。
    • 解决方法
      • 使用文档片段(DocumentFragment)来批量操作DOM。先将所有要添加的图片元素添加到文档片段中,最后一次性将文档片段插入到页面中。
      • 示例代码:
      • 示例代码:
    • 懒加载图片,只在图片即将进入可视区域时才加载,减少初始加载的压力。可以使用IntersectionObserver API来实现懒加载。
    • 懒加载图片,只在图片即将进入可视区域时才加载,减少初始加载的压力。可以使用IntersectionObserver API来实现懒加载。
  • 不同屏幕尺寸适配问题
    • 问题原因:移动端设备屏幕尺寸多样,在不同设备上如果列数和布局规则不灵活调整,会导致布局效果不佳。
    • 解决方法:使用媒体查询(Media Queries)根据屏幕宽度调整列数等布局相关参数。
    • 示例代码(CSS部分):
    • 示例代码(CSS部分):
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

分享:纯 css 瀑布流 和 js 瀑布流

博客地址:https://ainyi.com/60 分享一次纯 css 瀑布流  和 js 瀑布流 纯 css 写瀑布流 1.multi-columns 方式: 通过 Multi-columns 相关的属性...看到这里,我们可以发现,使用纯 css 写瀑布流,每一块 item 都是从上往下排列,不能做到从左往右排列: ? 这样子若是动态加载图片的瀑布流,体验就会很不好 我们想要的是这样: ?...这样做只能通过 js 来写瀑布流 js 写瀑布流: html 结构与上面类似,这里我用图片来做示例: 1 2 瀑布流实现方式: css 的绝对定位方式:根据每张图片的位置设置 top 和 left 值: 1 //瀑布流效果 2 //这里有一个坑(已经修复): 3 //因为是动态加载远程图片,在未加载完全无法获取图片宽高...这实现了横向排列的瀑布流效果 欢迎浏览 GitHub:https://github.com/Krryxa 博客地址:https://ainyi.com/60

8.9K40

分享一次纯 css 瀑布流 和 js 瀑布流

博客地址:https://ainyi.com/60 现在百度图片,360 图片搜索,都是以一种瀑布流的形式展示,那么接下来,分享一波纯 css 瀑布流 和 js 瀑布流 纯 css 写瀑布流 multi-columns...-- more items --> .masonry 是瀑布流容器,里面放置了列表 item,在 .masonry 中设置 column-count(列数) 和 column-gap(列间距...,每一块 item 都是从上往下排列,不能做到从左往右排列: [kc4aje4u6f.jpeg] 这样子若是动态加载图片的瀑布流,体验就会很不好 我们想要的是这样: [no351tx20r.jpeg]...要实现如上,只能通过 js 来写瀑布流 js 写瀑布流 html 结构与上面类似,但这里我用图片来做示例 ...瀑布流实现方式 css 的绝对定位方式:根据每张图片的位置设置 top 和 left 值 // 瀑布流效果 // 这里有一个坑(已经修复): // 因为是动态加载远程图片,在未加载完全无法获取图片宽高

2.4K40
  • 多栏布局与JS实现瀑布流

    css3属性之多栏布局与JS实现瀑布流    背景:之前打算自己总结一下flex布局的知识点,发现自己无从下手,原因在何处:我反思了一下,其实原因很简单,使用的次数少,更多的时间使用了百分比,浮动和定位解决...column-width宽度时,同时设置盒子的width,否则宽度默认为100%,每栏宽度按栏数平均分;盒子每栏宽度必须大于等于column-width设定的值,否则就会减少栏数来增加每栏宽度 css3多列和JS...实现瀑布流  给自己安利一波吧,看到网上很多瀑布流的效果,哇,简直棒极了有没有;于是我迫不及待的打开V**,打开了pinterest的官网。...自己也梳理梳理逻辑:js代码之前,一定要先搞清逻辑,再动手写代码> 我们都不陌生瀑布流是同宽的,但是高度不一,js主要的工作就是根据高度来进行布局, 1)当一行排满后,准备排第二行的时候,....box .pic img { display: block; width: 100%; } 梳理完了逻辑,该动手写js

    3K90

    分享 1个原生 JS 瀑布流案例

    瀑布流布局中的图片有一个核心特点 —— 等宽不定等高,瀑布流布局在国内网网站都有一定规模的使用,比如pinterest、花瓣网等等。那么接下来就基于这个特点开始瀑布流探索之旅。...waterfall-box { float: left; width: 200px; padding-left: 10px; padding-bottom: 10px; } 至此完成了瀑布流的基本布局...联想到业务场景中瀑布流中下拉加载的图片一般都来自 Ajax 异步获取,那么加载的数据必然不能写死在库里,期望能实现如下调用(此处借鉴了 waterfall 的使用方式), const waterfall...waterfall.on("load", function () { // 此处进行 ajax 同步/异步添加图片 }) 观察调用方式,不难联想到使用发布/订阅模式来实现它,关于发布/订阅模式,之前在Node.js

    1.9K20

    原生 JS 实现一个瀑布流插件

    瀑布流布局中的图片有一个核心特点 —— 等宽不定等高,瀑布流布局在国内外网站都有一定规模的使用,比如pinterest、花瓣网等等。那么接下来就基于这个特点开始瀑布流探索之旅。...waterfall-box { float: left; width: 200px; padding-left: 10px; padding-bottom: 10px; } 至此完成了瀑布流的基本布局...联想到业务场景中瀑布流中下拉加载的图片一般都来自 Ajax 异步获取,那么加载的数据必然不能写死在库里,期望能实现如下调用(此处借鉴了 waterfall 的使用方式), const waterfall...waterfall.on("load", function () { // 此处进行 ajax 同步/异步添加图片 }) 观察调用方式,不难联想到使用发布/订阅模式来实现它,关于发布/订阅模式,之前在 Node.js

    2.4K40

    iOS 瀑布流封装

    [瀑布流.gif] 功能描述:WSLWaterFlowLayout 是在继承于UICollectionViewLayout的基础上封装的带头脚视图的瀑布流控件。...目前支持竖向瀑布流(item等宽不等高、支持头脚视图)、水平瀑布流(item等高不等宽 不支持头脚视图)、竖向瀑布流( item等高不等宽、支持头脚视图)三种样式的瀑布流布局。...下面是WSLWaterFlowLayout.h中的属性方法和代理方法,含义注释的还算清晰: typedef enum { WSLVerticalWaterFlow = 0, /** 竖向瀑布流...item等宽不等高 */ WSLHorizontalWaterFlow = 1, /** 水平瀑布流 item等高不等宽 不支持头脚视图*/ WSLVHWaterFlow = 2, /...** 竖向瀑布流 item等高不等宽 */ WSLLineWaterFlow = 3 /** 线性布局 待完成,敬请期待 */ } WSLFlowLayoutStyle;//样式 @class

    1.6K80

    iOS 瀑布流封装

    瀑布流.gif 功能描述:WSLWaterFlowLayout 是在继承于UICollectionViewLayout的基础上封装的带头脚视图的瀑布流控件。...目前支持竖向瀑布流(item等宽不等高、支持头脚视图)、水平瀑布流(item等高不等宽 不支持头脚视图)、竖向瀑布流( item等高不等宽、支持头脚视图)三种样式的瀑布流布局。...下面是WSLWaterFlowLayout.h中的属性方法和代理方法,含义注释的还算清晰: typedef enum { WSLVerticalWaterFlow = 0, /** 竖向瀑布流...item等宽不等高 */ WSLHorizontalWaterFlow = 1, /** 水平瀑布流 item等高不等宽 不支持头脚视图*/ WSLVHWaterFlow = 2, /...** 竖向瀑布流 item等高不等宽 */ WSLLineWaterFlow = 3 /** 线性布局 待完成,敬请期待 */ } WSLFlowLayoutStyle;//样式 @class

    2K80
    领券