# WaterfallFlow **Repository Path**: ceclear/waterfall-flow ## Basic Information - **Project Name**: WaterfallFlow - **Description**: uniapp 瀑布流组件,持续更新... - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2024-03-27 - **Last Updated**: 2024-03-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 瀑布流组件迎来第一个开源版本,它是基于uniapp写的,欢迎大家前来捧场!!! :grin: 作者微信:toby_8 # 第一个组件waterfall-flow1 其 实现方式是 根据加载的图片计算高度后动态的设置元素所在位置,所有元素均被设为position: absolute; ### 在父组件中使用 ``` {{ item.text }} ``` * 由于要在组件中获取图片的高度,所以waterfall-flow1组件的slot不用再放置image标签 * 瀑布流组件接收的参数:
@Props list Array : 瀑布流的列表数据,默认为空数组
@Props offset Number : 元素之间的间隙,单位为 px,默认为10
@Props idKey String : 用于组件绑定查询依据,它必须是唯一的值,默认为'id'
@Props imageSrcKey String : 用于显示图片的src字段,默认为'image'
@Props imageStyle Object : 用于修饰图片的样式,接收标准的css键值对,默认为空对象
@Props boxStyle Object : 用于修饰每个元素盒子的样式,接收标准的css键值对,默认为空对象
@Props single Boolean : 是否只显示图片,控制显示圆角,如果只显示图片就会有8rpx的图片圆角,默认为false * 瀑布流组件向外导出的事件:
@Event load Params { total: Number 统计当前瀑布流渲染条数, colHeight: Array 记录着列高数据 } 组件渲染完毕触发
@Event clickItem Params { item: Object 当前点击项的数据, index: Number 当前点击项的下标 } 点击列表项时触发
@Event clickImage Params { item: Object 当前点击图片的数据, index: Number 当前点击图片的下标 } 点击列表的图片时触发 * 瀑布流组件向外导出的方法:
@Methods clear 清除数据,用于重新渲染,当数组被置空重新赋值时调用,例如下拉刷新等等
@Methods update 迫使组件重新渲染,调用后整个列表将重新渲染,例如排序等等场景
# 第二个组件waterfall-flow2 其 实现方式是 将列表拆分成左右两列的数组,然后在追加数据时,获取两个的高度,哪个矮一点我就加到哪个数组里 ### 在父组件中使用(写法参考了uView 1.x版本的瀑布流写法) ``` .demo-warter{ width: 100%; // 此为必须,让其容器自适应组件动态分配的宽度 height: auto; // 除了不能设置固定值,其他皆可,通常设为auto就好了 background-color: #ffaaff; // 盒子的背景色... border-radius: 10rpx; // 盒子圆角... overflow: hidden; // 用于显示圆角效果的... // 更多样式优化自行添加... } .demo-warter:nth-child(n+2){ margin-top: 10rpx; // 元素的上边距,从第二个元素开始出现10rpx,不设置它们将会挨在一起 } .demo-warter image{ width: 100%; // 此为必须,必须将图片的宽度设为100%,好让它自适应父容器显示 } ``` * 瀑布流组件接收的参数:
@Props list Array : 瀑布流的列表数据,默认为空数组
@Props offsetW String : offsetW => offset Within 外边距,两个元素的中间边距,默认有10rpx
@Props offsetO String : offsetO => offset Outside 外边距,两个元素的最外边边距,没有没有边距 空字符串
@Props offset String : 这个就厉害了,offset 是offsetW和offsetO的简写,也就是同时包含最外边的边距和元素之间的间距,传有这个属性不为空时offsetW和offsetO将不生效,默认为 空字符串 * 瀑布流组件向外导出的事件:
@Event load Params { total: Number 统计当前瀑布流渲染条数, leftList: Array 左边部分渲染的列表, rightList: Array 右边部分渲染的列表 } 组件渲染完毕触发 * 瀑布流组件向外导出的方法:
@Methods clear 清除数据,用于重新渲染,当数组被置空重新赋值时调用,例如下拉刷新等等
@Methods update 迫使组件重新渲染,调用后整个列表将重新渲染,例如排序等等场景

总结

可以看出,第二个组件更加简洁,在dom上也更加的灵活,这是两种获取高度方式不同的写法区别之处,理论上来说第二个BUG更少,性能也更好。 全是个人之见,大佬勿喷,本人还在继续学习当中,也写了其他很实用的组件cli,后续将会开放出来。。。