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

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

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

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

  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程序的方法与教程》本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用An... 目录使用虚拟环境和依赖冻结1. 创建虚拟环境2. 冻结依赖使用容器化技术(如 docker)1. 创

CSS弹性布局常用设置方式

《CSS弹性布局常用设置方式》文章总结了CSS布局与样式的常用属性和技巧,包括视口单位、弹性盒子布局、浮动元素、背景和边框样式、文本和阴影效果、溢出隐藏、定位以及背景渐变等,通过这些技巧,可以实现复杂... 一、单位元素vm 1vm 为视口的1%vh 视口高的1%vmin 参照长边vmax 参照长边re

PLsql Oracle 下载安装图文过程详解

《PLsqlOracle下载安装图文过程详解》PL/SQLDeveloper是一款用于开发Oracle数据库的集成开发环境,可以通过官网下载安装配置,并通过配置tnsnames.ora文件及环境变... 目录一、PL/SQL Developer 简介二、PL/SQL Developer 安装及配置详解1.下

CSS3中使用flex和grid实现等高元素布局的示例代码

《CSS3中使用flex和grid实现等高元素布局的示例代码》:本文主要介绍了使用CSS3中的Flexbox和Grid布局实现等高元素布局的方法,通过简单的两列实现、每行放置3列以及全部代码的展示,展示了这两种布局方式的实现细节和效果,详细内容请阅读本文,希望能对你有所帮助... 过往的实现方法是使用浮动加

VScode连接远程Linux服务器环境配置图文教程

《VScode连接远程Linux服务器环境配置图文教程》:本文主要介绍如何安装和配置VSCode,包括安装步骤、环境配置(如汉化包、远程SSH连接)、语言包安装(如C/C++插件)等,文中给出了详... 目录一、安装vscode二、环境配置1.中文汉化包2.安装remote-ssh,用于远程连接2.1安装2

vscode保存代码时自动eslint格式化图文教程

《vscode保存代码时自动eslint格式化图文教程》:本文主要介绍vscode保存代码时自动eslint格式化的相关资料,包括打开设置文件并复制特定内容,文中通过代码介绍的非常详细,需要的朋友... 目录1、点击设置2、选择远程--->点击右上角打开设置3、会弹出settings.json文件,将以下内

Window Server创建2台服务器的故障转移群集的图文教程

《WindowServer创建2台服务器的故障转移群集的图文教程》本文主要介绍了在WindowsServer系统上创建一个包含两台成员服务器的故障转移群集,文中通过图文示例介绍的非常详细,对大家的... 目录一、 准备条件二、在ServerB安装故障转移群集三、在ServerC安装故障转移群集,操作与Ser

windos server2022的配置故障转移服务的图文教程

《windosserver2022的配置故障转移服务的图文教程》本文主要介绍了windosserver2022的配置故障转移服务的图文教程,以确保服务和应用程序的连续性和可用性,文中通过图文介绍的非... 目录准备环境:步骤故障转移群集是 Windows Server 2022 中提供的一种功能,用于在多个

LinuxMint怎么安装? Linux Mint22下载安装图文教程

《LinuxMint怎么安装?LinuxMint22下载安装图文教程》LinuxMint22发布以后,有很多新功能,很多朋友想要下载并安装,该怎么操作呢?下面我们就来看看详细安装指南... linux Mint 是一款基于 Ubuntu 的流行发行版,凭借其现代、精致、易于使用的特性,深受小伙伴们所喜爱。对

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

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