瀑布流实现效果

实现思路

同样采用常见的两栏瀑布流布局,分别用数组goodsLeftList和goodsRightList储存左右两栏要渲染对象, 初始化时,加载一张图片,然后依次把图片加到栏高更低的一栏中。 主要使用的是image的@load事件。每次通过计算放入左右列表 保存所有对象的数组将该对象删除 图片加载完毕触发下个模块实现懒加载的效果

代码理解

<view class="waterfall_left"  ><view class="waterfall_list" v-for="(item,index) in goodsLeftList" :key="index" "><view class="waterfall_list_img"><image :src="item.goods_main_pic" mode="widthFix" @load="considerPush"></image></view><view class="msg-box"><view class="name single-omit">{{item.goods_name}}</view><view class="price-box flex-align-center"><view class="unit"><text>¥</text>{{item.goods_sku.sku_sale_price}}</view></view></view></view>
</view>
<view class="waterfall_right"  ><view class="waterfall_list" v-for="(item,index) in goodsRightList" :key="index"><view class="waterfall_list_img"><image :src="item.goods_main_pic" mode="widthFix" @load="considerPush"></image></view><view class="msg-box"><view class="name single-omit">{{item.goods_name}}</view><view class="price-box flex-align-center"><view class="unit"><text>¥</text>{{item.goods_sku.sku_sale_price}}</view></view></view></view>
</view><script>
export default {props: {list: { type: Array, required: true },},data() {return {// 左侧商品列表goodsLeftList:[],// 右侧商品列表goodsRightList:[],// 组件数据备份newList:[],}},created() {this.touchOff();// 触发排列},mounted(){},watch: { list(newValue, oldValue) {this.touchOff()},},computed:{},methods: {// 触发重新排列touchOff(){this.newList = [...this.list];this.goodsLeftList = [];this.goodsRightList = [];if(this.newList.length != 0){this.goodsLeftList.push(this.newList.shift());//触发排列}},// 计算排列considerPush(){if(this.newList.length == 0)return;//没有数据了let leftH = 0,rightH = 0;//左右高度var query = uni.createSelectorQuery().in(this);query.selectAll('.waterfall_left').boundingClientRect()query.selectAll('.waterfall_right').boundingClientRect()query.exec(res=>{leftH = res[0].length != 0 ? res[0][0].height : 0;//防止查询不到做个处理rightH = res[1].length != 0 ? res[1][0].height : 0;if(leftH == rightH || leftH < rightH){// 相等 || 左边小  this.goodsLeftList.push(this.newList.shift());}else{// 右边小this.goodsRightList.push(this.newList.shift());}});},}
}
</script>

目前已封装为组件 传入参数list即可直接使用。因使用场景不同css自己因情况各自书写 这里就不罗列了 本文章主要分享实现思路 理解之后可以做到举一反三

uni-app 实现瀑布流 最简洁方案相关推荐

  1. uni app map 地图 漂浮问题及方案

    uni app map 地图 漂浮问题及方案 文章页有图片导致的问题,图片没加载出来,导致文章内容高度不固定,如果图片没加载出来,高度就是0,如果此时开始加载map,那么map就在那里加载,map原生 ...

  2. .Net/C#分库分表高性能O(1)瀑布流分页

    框架介绍 依照惯例首先介绍本期主角:ShardingCore 一款ef-core下高性能.轻量级针对分表分库读写分离的解决方案,具有零依赖.零学习成本.零业务代码入侵 dotnet下唯一一款全自动分表 ...

  3. js实现审批流_小程序瀑布流组件:支持翻页与图片懒加载

    电商小程序中,用到瀑布流的地方非常多,每次都写一个瀑布流,重复一次逻辑,作为程序员,肯定是非常不愿意的. 瀑布流的形式都是大同小异,不同的是瀑布流中每个模块的内容,随业务而变化. 所以,我们把瀑布流框 ...

  4. swiper 定义放多少张图片_小程序瀑布流组件:支持翻页与图片懒加载

    (给前端大全加星标,提升前端技能) 作者:老人羽海 https://segmentfault.com/a/1190000022680541 电商小程序中,用到瀑布流的地方非常多,每次都写一个瀑布流,重 ...

  5. 教你如何实现一个完美的移动端瀑布流组件(附源码)

    背景 瀑布流是大家日常开发过程中经常遇到的一个场景,我们公司内部的组件库中也提供了一些解决方案.但这些方案适用场景都很单一,且每个实现方案都或多或少存在一些问题,基于此,我们设计与开发了一个兼容多场景 ...

  6. 小程序swiper怎么让内容撑开高度_小程序瀑布流组件:支持翻页与图片懒加载

    电商小程序中,用到瀑布流的地方非常多,每次都写一个瀑布流,重复一次逻辑,作为程序员,肯定是非常不愿意的. 瀑布流的形式都是大同小异,不同的是瀑布流中每个模块的内容,随业务而变化. 所以,我们把瀑布流框 ...

  7. 【实战】1364- 实现一个完美的移动端瀑布流组件(附源码)

    背景 瀑布流是大家日常开发过程中经常遇到的一个场景,我们公司内部的组件库中也提供了一些解决方案.但这些方案适用场景都很单一,且每个实现方案都或多或少存在一些问题,基于此,我们设计与开发了一个兼容多场景 ...

  8. uniapp开发:瀑布流 灵活配置 简单易用 兼容vue2vue3小程序、H5、app等多端

    概要 支持的平台 使用方式 属性说明 事件说明 组件方法 refresh的使用示例 隐藏单项图片示例 完整示例 温馨提示 关注我,不迷路 概要 custom-waterfalls-flow是一个瀑布流 ...

  9. 微信小程序模仿开眼视频app(三)——信息卡片瀑布流和分类

    <微信小程序模仿开眼视频app(一)--视频首页.视频详情.分类> <微信小程序模仿开眼视频app(二)--搜索功能> 可到我的github账号上去copy文件 瀑布流部分 文 ...

最新文章

  1. VS2015--win32project配置的一些想法之在 Visual Studio 2015 中进行调试的同一时候分析性能...
  2. 固态存储作缓存 提升性能有绝招
  3. RHEL5.4 iptables 配置详解(图)
  4. python面向对象(part1)--类和对象
  5. 【编译原理】CFG分析树
  6. Codeforces Round #732 (Div. 2) D. AquaMoon and Chess 组合数学 + 找规律
  7. 输入这个命令之后,FinalShell连接不上地推主机了
  8. Android 11 正式版发布!
  9. 2019111 控制台上实现极乐净土(有图有背景音乐)
  10. builder设计模式,写和很好
  11. linux下Umail服务的停止
  12. svg模糊_SVG的运动模糊效果
  13. 服务器数码管不显示,数码管常见故障及检修方法
  14. 微信小程序observers数据监听器的使用
  15. SSH日期录入,日期精确不能精准到时分秒处理
  16. 使用 Vue SVG 快速绘制曲线图(带动画)
  17. Thrill: 基于C++的高性能分布式批处理算法
  18. Win10下adobe acrobat安装字体字体教程
  19. echart居中放大地图layoutSize和layoutCenter
  20. sae mysql 跨应用授权_SAE Tornado 应用连接并使用 Mysql

热门文章

  1. python gps模块_树莓派连接GPS模块
  2. AIX各项知识链接(IBM官网)
  3. php中数学如何二维数组,如何用数学知识理解多维数组
  4. jsp+tomcat+mysql配置全过程nbsp;和mys…
  5. DELPHI的BPL使用
  6. 雅虎黑客事件严重 Verizon表示可能放弃收购
  7. linux下不同服务器间数据传输(wget,scp)
  8. firewall 防火墙
  9. Spring Boot与安全(安全、Spring Security)
  10. 猜数字游戏~~~~~~