首页 > 其他分享 >弹性盒子flex布局轻松实现瀑布流

弹性盒子flex布局轻松实现瀑布流

时间:2023-11-08 17:22:53浏览次数:31  
标签:flex 盒子 newArr 高度 列表 瀑布 每列 数据 加载

这里介绍下简单实现瀑布流的方法,适合一次性加载完的数据列表。

如果是分页加载那就需要更复杂的计算了,但也可以在本案例的基础上进行扩展。

关键代码:

js部分:

let columCount = 2
let goodsList = this.properties.goodsList
//创建跟列数相同的新列表
let waterFallArr = new Array(columCount)
//向新列表填充数据,按原列表中的顺序依次赋给各子列表
goodsList.forEach((item, index) => {
    let newArr = waterFallArr[index % columCount] //
    if (newArr == undefined || newArr == 'undefined') {
        newArr = []
    }
    newArr.push(item)
    waterFallArr[index % columCount] = newArr
})
this.setData({
    waterFallArr: waterFallArr
})

如上,新建一个列表,然后根据模运算,将原列表中的数据依次赋给新列表的各个子列表中即可,这样跟原列表展示顺序就一致了。

wxml部分:

<view class="goodsList">
    <view class="goodsItemBox flex column align_center" style="width: 50%;" wx:for="{{waterFallArr}}" wx:key="{{index}}">
        <view class="goodsItem" wx:for="{{item}}" wx:key="key">
            ......
        </view>
    </view>
</view>

如上,即可实现一次性加载数据的瀑布流展示,其实就是分多列进行展示的,也就是重组下数据而已。

分页加载瀑布流的思考:

1. 每列高度差别不是很大——先不考虑高度问题,分页加载可以把每页展示的数据设置为瀑布流列数的整倍数,这样每页数据追加到子列表中数量都相同,数据就好处理了。这种方法可能不是最优的,但是应该是最简单的了,也就计算每列数据加载后的高度可能复杂点。

2. 每列高度差别有点大,但是一页加载下来整体高度区别不大——那么每页加载之后计算下当前列表每列的高度,然后下一页数据分配的时候要优先补给高度最小的一个,后续分页就按这个规则追加数据就可以了。

3. 每列高度差别比较大——终极方案就是结合列表子项布局及样式,根据子项内容计算每项高度。可以先分配一行数据,然后根据每列的高度,后边每一条数据都添加到高度最小的那一列,添加之后重新计算高度,以此类推。这种方法是最优的,只要高度计算比较准确,那么展示肯定是三种解决方案里边最好的。

 

标签:flex,盒子,newArr,高度,列表,瀑布,每列,数据,加载
From: https://www.cnblogs.com/xyyt/p/17817879.html

相关文章

  • 通过 SAP UI5 IconTabBar 控件结合 FlexibleColumnLayout 实现多页面 Master-Detail
    本文也是来源于网络上一位朋友的咨询,这是这位朋友实际项目中的真实需求。本文介绍了一个实际项目中开发需求的详细实现过程。通过使用SAPUI5IconTabBar控件,我们可以让逻辑上属于不同业务范畴的界面,通过点击对应的Icon,以切换的方式,在同一块屏幕区域显示出来。IconTabBar结......
  • flex布局
    常见属性display:定义一个元素是否为弹性容器。display:flex:将元素设置为弹性容器。display:inline-flex:将元素设置为内联弹性容器。flex-direction:指定弹性容器的主轴方向。flex-direction:row:主轴水平,项目从左到右排列。flex-direction:row-reverse:主轴水平,项目......
  • 记录--Vue3基于Grid布局简单实现一个瀑布流组件
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助前言在学习Grid布局之时,我发现其是CSS中的一种强大的布局方案,它将网页划分成一个个网格,可以任意组合不同的网格,做出各种各样的布局,在刷某书和某宝首页时,我们发现其展示方式就是一种瀑布流,是一种流行的网站页面布局......
  • css盒子模型: 标准盒子模型和IE盒子模型(怪异盒子模型)
    CSS盒模型(boxmodel),它是包含了内容(content)、内边距(padding)、边框(border)、外边距(margin)属性的一个盒子模型。 而盒模型又分为两类标准:标准盒子模型和IE盒子模型(怪异盒子模型) 在标准盒子模型中,盒子的width是指content的宽高, 而IE盒子模型中就比较怪异了,它包含了......
  • [CSS]关于<img>标签距离底部盒子5px的问题
     问题描述:在某个盒子内部放入一个<img>标签,不写样式的情况下,<img>总是和父盒子有5px空隙。<!DOCTYPEhtml><html><head><metacharset="utf-8"><title>清除图片多5px问题</title><linkrel="stylesheet"......
  • flutter开发应用报RenderFlex children have non-zero flex but incoming height cons
    错误RenderFlexchildrenhavenon-zeroflexbutincomingheightconstraintsareunbounded.错误原因"RenderFlexchildrenhavenon-zeroflexbutincomingheightconstraintsareunbounded."错误通常是因为在使用Flex布局(例如Column、Row或Flex)时,子部件的某些子......
  • Flex布局
    1弹性盒子概述1.1概述使用弹性盒子布局,元素可以,拉伸以填充额外的空间,收缩以适应更小的空间。1.2弹性盒子可以解决如下问题元素垂直居中元素间隙的平均分配自动占据剩余空间1.3弹性盒子组成弹性盒子:是一种一维的布局方式,只能按行水平布局或按列垂直布局。弹性盒子......
  • uniapp开发nuve原生瀑布流组件waterfall列表后边出现空白的处理方法
    异常描述:首页有轮播、广告位、瀑布流商品列表,但是使用了原生组件waterfall的商品列表后边出现了大面积空白。解决方法:将waterfall放到父容器下边或者直接放到template下边作为父容器,给父容器设置高度设置为窗口高度,除瀑布流展示的列表外,其他的组件都放在中即可。<template>......
  • flex-2.6.4编译报错
    在ubuntu18.04上flex-2.6.4编译折腾了好多地方都不成功。突然同事提醒,是不是版本没有更新。然后查看flex-2.6.4版本是2017年发布的,虽然它当时没有问题,但是后面其他工具升级了,这样编译工具版本高,代码版本低,有肯能会编译不出来。解决方法:降低系统版本,编译工具版本也随......
  • css图片宽高不同,缩放图片,保持宽高,注意最外层的盒子要用display:inline-flex
    <divclass="product"><Popoverplacement="right"><template#content><divclass="w-[200px]h-[200px]"><img:src=&......