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

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

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

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

  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

相关文章

手把手教你idea中创建一个javaweb(webapp)项目详细图文教程

《手把手教你idea中创建一个javaweb(webapp)项目详细图文教程》:本文主要介绍如何使用IntelliJIDEA创建一个Maven项目,并配置Tomcat服务器进行运行,过程包括创建... 1.启动idea2.创建项目模板点击项目-新建项目-选择maven,显示如下页面输入项目名称,选择

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

W外链微信推广短连接怎么做?

制作微信推广链接的难点分析 一、内容创作难度 制作微信推广链接时,首先需要创作有吸引力的内容。这不仅要求内容本身有趣、有价值,还要能够激起人们的分享欲望。对于许多企业和个人来说,尤其是那些缺乏创意和写作能力的人来说,这是制作微信推广链接的一大难点。 二、精准定位难度 微信用户群体庞大,不同用户的需求和兴趣各异。因此,制作推广链接时需要精准定位目标受众,以便更有效地吸引他们点击并分享链接

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听

EMLOG程序单页友链和标签增加美化

单页友联效果图: 标签页面效果图: 源码介绍 EMLOG单页友情链接和TAG标签,友链单页文件代码main{width: 58%;是设置宽度 自己把设置成与您的网站宽度一样,如果自适应就填写100%,TAG文件不用修改 安装方法:把Links.php和tag.php上传到网站根目录即可,访问 域名/Links.php、域名/tag.php 所有模板适用,代码就不粘贴出来,已经打

跨系统环境下LabVIEW程序稳定运行

在LabVIEW开发中,不同电脑的配置和操作系统(如Win11与Win7)可能对程序的稳定运行产生影响。为了确保程序在不同平台上都能正常且稳定运行,需要从兼容性、驱动、以及性能优化等多个方面入手。本文将详细介绍如何在不同系统环境下,使LabVIEW开发的程序保持稳定运行的有效策略。 LabVIEW版本兼容性 LabVIEW各版本对不同操作系统的支持存在差异。因此,在开发程序时,尽量使用

CSP 2023 提高级第一轮 CSP-S 2023初试题 完善程序第二题解析 未完

一、题目阅读 (最大值之和)给定整数序列 a0,⋯,an−1,求该序列所有非空连续子序列的最大值之和。上述参数满足 1≤n≤105 和 1≤ai≤108。 一个序列的非空连续子序列可以用两个下标 ll 和 rr(其中0≤l≤r<n0≤l≤r<n)表示,对应的序列为 al,al+1,⋯,ar​。两个非空连续子序列不同,当且仅当下标不同。 例如,当原序列为 [1,2,1,2] 时,要计算子序列 [

这些心智程序你安装了吗?

原文题目:《为什么聪明人也会做蠢事(四)》 心智程序 大脑有两个特征导致人类不够理性,一个是处理信息方面的缺陷,一个是心智程序出了问题。前者可以称为“认知吝啬鬼”,前几篇文章已经讨论了。本期主要讲心智程序这个方面。 心智程序这一概念由哈佛大学认知科学家大卫•帕金斯提出,指个体可以从记忆中提取出的规则、知识、程序和策略,以辅助我们决策判断和解决问题。如果把人脑比喻成计算机,那心智程序就是人脑的

uniapp设置微信小程序的交互反馈

链接:uni.showToast(OBJECT) | uni-app官网 (dcloud.net.cn) 设置操作成功的弹窗: title是我们弹窗提示的文字 showToast是我们在加载的时候进入就会弹出的提示。 2.设置失败的提示窗口和标签 icon:'error'是设置我们失败的logo 设置的文字上限是7个文字,如果需要设置的提示文字过长就需要设置icon并给

lvgl8.3.6 控件垂直布局 label控件在image控件的下方显示

在使用 LVGL 8.3.6 创建一个垂直布局,其中 label 控件位于 image 控件下方,你可以使用 lv_obj_set_flex_flow 来设置布局为垂直,并确保 label 控件在 image 控件后添加。这里是如何步骤性地实现它的一个基本示例: 创建父容器:首先创建一个容器对象,该对象将作为布局的基础。设置容器为垂直布局:使用 lv_obj_set_flex_flow 设置容器