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

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

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

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

  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基于微信OCR引擎实现高效图片文字识别

《Python基于微信OCR引擎实现高效图片文字识别》这篇文章主要为大家详细介绍了一款基于微信OCR引擎的图片文字识别桌面应用开发全过程,可以实现从图片拖拽识别到文字提取,感兴趣的小伙伴可以跟随小编一... 目录一、项目概述1.1 开发背景1.2 技术选型1.3 核心优势二、功能详解2.1 核心功能模块2.

python编写朋克风格的天气查询程序

《python编写朋克风格的天气查询程序》这篇文章主要为大家详细介绍了一个基于Python的桌面应用程序,使用了tkinter库来创建图形用户界面并通过requests库调用Open-MeteoAPI... 目录工具介绍工具使用说明python脚本内容如何运行脚本工具介绍这个天气查询工具是一个基于 Pyt

Ubuntu设置程序开机自启动的操作步骤

《Ubuntu设置程序开机自启动的操作步骤》在部署程序到边缘端时,我们总希望可以通电即启动我们写好的程序,本篇博客用以记录如何在ubuntu开机执行某条命令或者某个可执行程序,需要的朋友可以参考下... 目录1、概述2、图形界面设置3、设置为Systemd服务1、概述测试环境:Ubuntu22.04 带图

Python程序打包exe,单文件和多文件方式

《Python程序打包exe,单文件和多文件方式》:本文主要介绍Python程序打包exe,单文件和多文件方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录python 脚本打成exe文件安装Pyinstaller准备一个ico图标打包方式一(适用于文件较少的程

Python程序的文件头部声明小结

《Python程序的文件头部声明小结》在Python文件的顶部声明编码通常是必须的,尤其是在处理非ASCII字符时,下面就来介绍一下两种头部文件声明,具有一定的参考价值,感兴趣的可以了解一下... 目录一、# coding=utf-8二、#!/usr/bin/env python三、运行Python程序四、

如何基于Python开发一个微信自动化工具

《如何基于Python开发一个微信自动化工具》在当今数字化办公场景中,自动化工具已成为提升工作效率的利器,本文将深入剖析一个基于Python的微信自动化工具开发全过程,有需要的小伙伴可以了解下... 目录概述功能全景1. 核心功能模块2. 特色功能效果展示1. 主界面概览2. 定时任务配置3. 操作日志演示

Redis迷你版微信抢红包实战

《Redis迷你版微信抢红包实战》本文主要介绍了Redis迷你版微信抢红包实战... 目录1 思路分析1.1hCckRX 流程1.2 注意点①拆红包:二倍均值算法②发红包:list③抢红包&记录:hset2 代码实现2.1 拆红包splitRedPacket2.2 发红包sendRedPacket2.3 抢

无法启动此程序因为计算机丢失api-ms-win-core-path-l1-1-0.dll修复方案

《无法启动此程序因为计算机丢失api-ms-win-core-path-l1-1-0.dll修复方案》:本文主要介绍了无法启动此程序,详细内容请阅读本文,希望能对你有所帮助... 在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是"api-ms-win-core-path-l1-1-0.dll丢失

C#实现访问远程硬盘的图文教程

《C#实现访问远程硬盘的图文教程》在现实场景中,我们经常用到远程桌面功能,而在某些场景下,我们需要使用类似的远程硬盘功能,这样能非常方便地操作对方电脑磁盘的目录、以及传送文件,这次我们将给出一个完整的... 目录引言一. 远程硬盘功能展示二. 远程硬盘代码实现1. 底层业务通信实现2. UI 实现三. De

SpringBoot后端实现小程序微信登录功能实现

《SpringBoot后端实现小程序微信登录功能实现》微信小程序登录是开发者通过微信提供的身份验证机制,获取用户唯一标识(openid)和会话密钥(session_key)的过程,这篇文章给大家介绍S... 目录SpringBoot实现微信小程序登录简介SpringBoot后端实现微信登录SpringBoo