瀑布流布局 流式布局 不规则图文排列布局 微信小程序按顺序排列的瀑布流布局

本文主要是介绍瀑布流布局 流式布局 不规则图文排列布局 微信小程序按顺序排列的瀑布流布局,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

微信小程序按顺序排列的瀑布流布局

首先我说一下,我的项目需求:

  1. 瀑布流布局排列
  2. 按照一定的顺序排列
  3. 图文结合

不好意思,跟大家分享下我的过程,不想看的直接跳过看最后,

起初的实现思路是:

1、由于图片是从后台获取的,大家都知道image 有一个bindload事件,就是图片加载完成,就是在图片加载完成后获取到该图片的高度,然后通过既定的宽度,算出图片的实际显示高度。
2、知道了图片的实际显示高度,就该计算图片到底是放在左边还是右边,为了方便计算,我们将所有图片列表一分为二,然后如果左边小于等于右边,就将刚加载完成的这张图片放在左边,很容易这样就形成了瀑布流。当然这些可能都是大家所熟知的。
3、瀑布流实现了,可是每个图片加载完成的顺序跟后台给的顺序不同,导致每次打开瀑布流看到的顺序都不同,不符合我们的需求。

第一次调整:

为了达到按照后台给的顺序排列,我们做了下列调整:
多添加了一个事件,利用index 控制每次按照顺序 加载下一张,然后根据高度再决定放左边还是右边,哇塞,功夫不负有心人,果然实现了,
可是问题又来了,呵呵哒,要求的顺序也做到了,加载速度慢的想砸手机(哈哈哈……只是某些手机特别慢啦),毕竟我们的小程序是供老年人用的,所以……你懂的,

第二次调整:

如何让加载速度变快一些呢?当然要排除额外付费的情况,哈哈哈……
经过分析,为什么加载速度慢?首先每次图片加载的时候都要重新计算高度,所以我们想到了,在后台的数据中添加了图片的宽度和高度的值,这样就避免了每次都要在bindload时计算图片的实际显示高度,可以从后台获取列表对数据处理的同时,直接拿到高度,然后根据宽高比,计算出高度,然后根据左右两边高度比较,确定放置在哪一边,然后将高度加在左边或右边。这样实现的好处
第一:无需等图片加载完毕,就可以确定图片放置的位置,
第二,可以无需考虑之前的排序问题。
第三:代码缩减了N行
第四:加载速度超级快呀(这才是我想要的啦)

抱歉给你们看了这么多废话,下面是重点:

效果是这样滴
有需要的朋友可以直接去下载demo ,如果觉得还可以借用您发财的小手为我点亮star,地址为:https://github.com/taurus888/waterFlowDemo
在这里插入图片描述
原谅我是个娃娃控

主要代码
getImageList(){/*第一步计算出每个图片的高度第二步判断放置在哪边*/let _this = this;let imageList = this.data.imageList; //假装我们从后台拿到了列表for(let i=0;i<imageList.length;i++){  let imgWidth = _this.data.imgWidth;  let oImgW = imageList[i].imageWidth;let col1 = _this.data.col1;let col2 = _this.data.col2;var hotListLeftHeightTemp = _this.data.hotListLeftHeight;var hotListRightHeightTemp = _this.data.hotListRightHeight;//比例计算let scale = imgWidth / oImgW;imageList[i].imageHeight = imageList[i].imageHeight * scale;      //自适应高度imageList[i].imageHeight += 60;if (hotListLeftHeightTemp <= hotListRightHeightTemp) {hotListLeftHeightTemp += imageList[i].imageHeight;col1.push(imageList[i])} else {hotListRightHeightTemp += imageList[i].imageHeight;col2.push(imageList[i])}_this.setData({hotListLeftHeight: hotListLeftHeightTemp,hotListRightHeight: hotListRightHeightTemp,col1: col1,col2: col2})  }},onLoad: function () {// 瀑布流计算wx.getSystemInfo({success: (res) => {let ww = res.windowWidth;let wh = res.windowHeight;let imgWidth = ww * 0.48;let scrollH = wh;this.setData({scrollH: scrollH,imgWidth: imgWidth});}})  this.getImageList() },

这篇关于瀑布流布局 流式布局 不规则图文排列布局 微信小程序按顺序排列的瀑布流布局的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/349205

相关文章

python获取指定名字的程序的文件路径的两种方法

《python获取指定名字的程序的文件路径的两种方法》本文主要介绍了python获取指定名字的程序的文件路径的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 最近在做项目,需要用到给定一个程序名字就可以自动获取到这个程序在Windows系统下的绝对路径,以下

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

基于Python编写自动化邮件发送程序(进阶版)

《基于Python编写自动化邮件发送程序(进阶版)》在数字化时代,自动化邮件发送功能已成为企业和个人提升工作效率的重要工具,本文将使用Python编写一个简单的自动化邮件发送程序,希望对大家有所帮助... 目录理解SMTP协议基础配置开发环境构建邮件发送函数核心逻辑实现完整发送流程添加附件支持功能实现htm

C#控制台程序同步调用WebApi实现方式

《C#控制台程序同步调用WebApi实现方式》控制台程序作为Job时,需同步调用WebApi以确保获取返回结果后执行后续操作,否则会引发TaskCanceledException异常,同步处理可避免异... 目录同步调用WebApi方法Cls001类里面的写法总结控制台程序一般当作Job使用,有时候需要控制

MyBatis流式查询两种实现方式

《MyBatis流式查询两种实现方式》本文详解MyBatis流式查询,通过ResultHandler和Cursor实现边读边处理,避免内存溢出,ResultHandler逐条回调,Cursor支持迭代... 目录MyBATis 流式查询详解:ResultHandler 与 Cursor1. 什么是流式查询?

python使用Akshare与Streamlit实现股票估值分析教程(图文代码)

《python使用Akshare与Streamlit实现股票估值分析教程(图文代码)》入职测试中的一道题,要求:从Akshare下载某一个股票近十年的财务报表包括,资产负债表,利润表,现金流量表,保存... 目录一、前言二、核心知识点梳理1、Akshare数据获取2、Pandas数据处理3、Matplotl

Django开发时如何避免频繁发送短信验证码(python图文代码)

《Django开发时如何避免频繁发送短信验证码(python图文代码)》Django开发时,为防止频繁发送验证码,后端需用Redis限制请求频率,结合管道技术提升效率,通过生产者消费者模式解耦业务逻辑... 目录避免频繁发送 验证码1. www.chinasem.cn避免频繁发送 验证码逻辑分析2. 避免频繁

精选20个好玩又实用的的Python实战项目(有图文代码)

《精选20个好玩又实用的的Python实战项目(有图文代码)》文章介绍了20个实用Python项目,涵盖游戏开发、工具应用、图像处理、机器学习等,使用Tkinter、PIL、OpenCV、Kivy等库... 目录① 猜字游戏② 闹钟③ 骰子模拟器④ 二维码⑤ 语言检测⑥ 加密和解密⑦ URL缩短⑧ 音乐播放

Spring Boot 结合 WxJava 实现文章上传微信公众号草稿箱与群发

《SpringBoot结合WxJava实现文章上传微信公众号草稿箱与群发》本文将详细介绍如何使用SpringBoot框架结合WxJava开发工具包,实现文章上传到微信公众号草稿箱以及群发功能,... 目录一、项目环境准备1.1 开发环境1.2 微信公众号准备二、Spring Boot 项目搭建2.1 创建

golang程序打包成脚本部署到Linux系统方式

《golang程序打包成脚本部署到Linux系统方式》Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完... 目录本地编译golang程序上传Golang二进制文件到linux服务器总结本地编译Golang程序