效果图

实现代码:

思路:

将双瀑布流分为left、right两个数据流,通过动态获取两边数据的动态高度来进行判断,下一条数据插入低的一方。

因为用户所上传图片高度不一致,所以image的mode属性分为两种,如果图片宽高比大于1.5倍,则使用aspectFill属性,如果正常图片比例,则使用widthFix属性。

数据分页处理,懒加载数据,使用微信小程序onPageScroll属性动态获取到滚动条高度,判断滚动条滚动位置,进行请求数据,实现数据加载。

html:

          <!-- 内容部分 --><view class="container" ><view id="left"><view  class="listWrap" wx:for="{{leftList}}" catchtap="bottomButton" data-id="{{item.id}}" ><image src="{{item.imglist[0]}}"mode='{{item.mode=="screenshot"?"aspectFill":"widthFix"}}' style="max-height:400rpx;height:340rpx;" ></image><text class="listText">{{item.title}}</text></view></view><view id="right"><view class="listWrap" wx:for="{{rightList}}" wx:key="index" catchtap="bottomButton" data-id="{{item.id}}"><image src="{{item.imglist[0]}}" mode='{{item.mode=="screenshot"?"aspectFill":"widthFix"}}' style="max-height:400rpx;height:340rpx;" ></image><text class="listText">{{item.title }}</text></view></view></view>

js:

 // 1.调用接口获取信息getDataList() {let that = this;let timestamp = Date.parse(new Date()) / 1000;const data = {page: that.data.page.toString(),t: timestamp,openid: that.data.openId}// 调用秘钥方法let sign = CryptoJS.AesEncryptECB(JSON.stringify(data))wx.request({url: 'http://xxxxx?',data: { ...data, sign },method: 'GET',header: {'content-type': 'application/xml'},success: function (res) {let resData = res.data.data;// 获取图片信息that.getImgData(resData, 0);},fail: function (err) {console.log(err)},})},// 获取图片尺寸,判断image的mode属性,// 如果长宽比例 > 1.5 则使用aspectFill,否则使用widthFixgetImgData(resData, index) {let that = this;if (index < resData.length) {wx.request({url: resData[index].imglist[0].split('@base')[0]+'@base@tag=imageInfo',method: 'GET',header: {'content-type': 'application/xml'},success: function (res) {if (res.data.height / res.data.width > 1.5) {resData[index].mode = 'screenshot';index += 1that.getImgData(resData, index)} else {resData[index].mode = '';index += 1that.getImgData(resData, index)}},fail: function (err) {console.log(err)},})} else {that.setData({dataList: that.data.dataList.concat(resData),})// 调用瀑布流布局方法that.isLeft();}},/* 首页瀑布流布局 */// 判断左右插入async isLeft() {const { dataList, leftList, rightList } = this.data;let newDataList = dataList.slice(-10);query = wx.createSelectorQuery();for (const item of newDataList) {leftHeight <= rightHeight ? leftList.push(item) : rightList.push(item);//判断两边高度,来觉得添加到那边await this.getBoxHeight(leftList, rightList);}},// 布局对比getBoxHeight(leftList, rightList) { //获取左右两边高度return new Promise((resolve, reject) => {this.setData({ leftList, rightList }, () => {query.select('#left').boundingClientRect();query.select('#right').boundingClientRect();query.exec((res) => {leftHeight = res[0].height; //获取左边列表的高度rightHeight = res[1].height; //获取右边列表的高度resolve();});});})},// 通过监听滚动条,动态加载数据/* onPageScroll: tools.throttle(function (res) { */ // 引入外部节流函数onPageScroll: function (res) {let scrollTop = res.scrollTop;if (scrollTop >= this.data.scrollHight) {console.log("加载下一页")this.setData({scrollHight: this.data.scrollHight + 800})this.getDataList()}},

微信小程序双瀑布流布局+动态懒加载相关推荐

  1. 微信小程序媒体组件-image图片懒加载效果

    image 基础库 1.0.0 开始支持,低版本需做兼容处理. 图片.支持 JPG.PNG.SVG.WEBP.GIF 等格式,2.3.0 起支持云文件ID. 属性 类型 默认值 必填 说明 最低版本 ...

  2. 微信小程序实现瀑布流布局

    微信小程序实现瀑布流布局 实现的效果图如下显示: 一,需求分析 布局分为两列,两列的高度随着图片的插入而改变 默认给左右两列插入一张图片,插入图片后,根据两列的的高度做为判断依据,依次给高度更低的一列 ...

  3. php微信小程序向下滑动,微信小程序功能实现:上滑加载下拉刷新

    本篇文章给大家带来的内容是关于微信小程序功能实现:上滑加载下拉刷新,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 之前谈到文章列表的数据加载,是一次性全部加载,这样是不友好的.这章介 ...

  4. 微信小程序开发之scroll-view上拉加载数据实现

    微信小程序开发之scroll-view上拉加载数据实现 一.开发思路 1.使用小程序的scroll-view组件中提供了一个bindscrolltolower属性监听组件的滑动到了底部 https:/ ...

  5. 微信小程序图片处理方案,解决加载缓慢,影响用户体验

    1.改变图片尺寸:对于上传的图片,在后台对图片进行可接受范围内的最大限度压缩,图片宽高不用太大,大概预留你图片容器的1.5倍就行了,除非你做图片放大镜功能,否则小程序上加载2倍图意义不大,清晰度体验也 ...

  6. 微信小程序下拉刷新和上拉加载

    效果图 微信小程序实现下拉刷新和上拉加载有2中方法 1 用系统自带的 个人感觉特别简单 2 使用scroll-view  实现, scroll-view 里面有2个属性是滑动到顶部以及到底部如下 其实 ...

  7. 微信小程序下拉刷新和上拉加载的实现

    微信小程序开发交流qq群   173683895    承接微信小程序开发.扫码加微信. 正文: 一: 下拉刷新 下拉刷新两个步骤就能实现. 1.在要实现下拉刷新的页面的json配置文件里面加上 &q ...

  8. 【微信技术-微信小程序】------- 渐进式骨架屏(加载流)(第二篇)

    提示:看如下内容需要了解第一篇:简单入门(骨架屏(加载流) 简单入门(第一篇)) 目录 一.什么是渐进式骨架屏? 二.实现渐进式骨架屏 三.效果展示 下载示例代码地址: 渐进式骨架屏示例代码-下载 一 ...

  9. 微信小程序下拉刷新/上拉加载组件

    简介 一款基于官方组件scroll-view进行封装的支持上拉加载下拉刷新的微信小程序组件,需要基础库2.10.1及以上, 项目地址:github 预览 功能 下拉刷新 上拉加载 支持自定义下拉样式 ...

最新文章

  1. [python] 溜了,溜了,七牛云图片资源批量下载 自建图床服务器
  2. 计算机高二期末考试试题,高二年级计算机专业期末试题
  3. Java Number 类
  4. Android项目实战(十三):浅谈EventBus
  5. ppct各代表什么_半导体50指数_股票大盘分时图中白线和黄线各代表什么?
  6. [转载] Java 将字符串首字母转为大写 - 利用ASCII码偏移
  7. 超全机器学习工程师成长路线图,GitHub已收获6400+Star!
  8. linux 更换窗口管理器,linux Gnome .KDE.xfce4窗口管理器切换
  9. django中时区设置
  10. php zscan,PHP redis SCAN、SSCAN、ZSCAN、HSCAN 的使用, pipe 快速redis插入数据
  11. invest模型的python安装方法,两种方法
  12. CSS垂直居中img
  13. 计算机软件系统崩溃,电脑软件打开后闪退或崩溃怎么办
  14. 快递柜智能柜C语言程序,智能快递柜的设计与实现_李浩然.pdf
  15. Problem : 找钱问题
  16. Java框架_SpringBoot整合Spring Data JPA 转载:https://blog.csdn.net/lxp18850413505/article/details/80987550
  17. 计算机应用开机禁止打开,怎样设置电脑开机启动项禁止
  18. 阿里云达摩院视觉AI介绍
  19. MarkDownPad2实用教程及MarkDown常用语法
  20. 计算 m 的 n 次幂

热门文章

  1. Sparse Merkle Tree
  2. 基于Java毕业设计新冠疫苗接种预约系统登录源码+系统+mysql+lw文档+部署软件
  3. 【java毕业设计】基于java+BS的QQ屏幕截图工具设计与实现(毕业论文+程序源码)——屏幕截图工具
  4. jqgrid setCell 单元格赋值空字符串 无效处理
  5. iOS 应用创建APNS 和 VOIP的pem证书流程
  6. 软件开发模型、软件设计模式、软件架构风格
  7. 一个实践梦想的传奇人物
  8. 安全TEE下的GIC-400(一)
  9. Java的主要应用领域有哪些?
  10. 宏基d260linux系统,Devuan GNU+Linux 2.0.0 稳定版发布,无systemd自由版本