微信小程序实现瀑布流展示

2023-11-08

​ 在现代互联网时代,瀑布流展示方式越来越受到人们的青睐,其可以将海量的图片、商品等展示在界面上,不同大小的内容通过某种规律美观、有序地布局在网页或应用程序上,极大地提升了内容的呈现方式和用户体验。微信小程序在展示图片和商品等方面也可以采用瀑布流布局,让小程序的内容看起来更加美观、实用。然而,小程序内置的组件并不支持瀑布流展示,需要我们自己动手来实现。本文将带您一步步实现微信小程序瀑布流展示效果,让您的小程序更加出色。本文主要分为三个部分,分别介绍实现瀑布流布局的思路、详细的代码实现和样式的优化,希望能够为读者提供实用的经验和技巧。

目前微信小程序官方提供了Skyline渲染引擎实现瀑布流效果

实现瀑布流布局的思路

  1. 确定每个元素的宽度和高度。这是瀑布流布局的重要前提。
  2. 定义一个包含所有元素的容器,并设置其宽度。
  3. 创建一个数组columnHeight,用于保存每一列的高度。
  4. 对于容器中的每一个元素,需要找到它可以放置的位置。遍历columnHeight数组中的每一个元素,找到最小高度的列,将元素添加到该列。
  5. 更新该列的高度,将当前元素高度加入columnHeight数组中对应的元素中。
  6. 继续处理下一个元素,直至所有元素全部处理完毕。
  7. 容器的高度最终应该是columnHeight数组中的最大值,将该值设置为容器的高度即可。

具体实现时,我们需要在 wxml 文件中定义一个 scroll-view 组件和一个用来显示内容的 view 组件。在 JavaScript 文件中,我们将定义一个 contentArray 数组来存储所有要展示的内容,并通过 onLoad 和 onReachBottom 方法来实现内容的动态加载。代码的具体实现需要了解微信小程序的渲染机制、布局方法以及事件传递等知识。

详细的代码实现

  1. 定义一个数组来保存内容,并初始化一个列高度的数组。
Page({
  data: {
    contentArray: [], // 定义一个数组
    columnHeight: [0, 0] // 初始化列高度的数组
  }
})
  1. 在 onLoad 方法中,初始化 contentArray 数组。
onLoad: function () {
  var that = this;
  wx.request({
    url: 'https://xxx.com/getData.php',
    success: function(res) {
      that.setData({
        contentArray: res.data
      });
    }
  })
}
  1. 在 onReachBottom 方法中,动态加载数据并更新 contentArray 数组。
onReachBottom: function () {
  var that = this;
  wx.request({
    url: 'https://****',
    success: function(res) {
      var contentArray = that.data.contentArray.concat(res.data);
      that.setData({
        contentArray: contentArray
      });
    }
  })
}
  1. 在 wxml 中,实现 scroll-view 和 view 标签的布局。
<scroll-view scroll-y="true" bindscrolltolower="onReachBottom">
  <view class="content" wx:for="{{contentArray}}" wx:key="{{index}}" style="height:{{item.height * rate}}px;position:absolute;left:{{item.left}}px;top:{{item.top * rate}}px;">
    <image src="{{item.src}}" style="width:{{item.width}}px;height:{{item.height}}px;"></image>
  </view>
</scroll-view>
  1. 在 JavaScript 文件中,实现 contentArray 数组的更新。
// 按照瀑布流布局为图片分配位置,并更新列高度
let heightArr = that.data.columnHeight;
let leftWidth = res.windowWidth / 2 - imgWidth / 2;
let rightWidth = res.windowWidth / 2 + imgWidth / 2;
let minHeight = Math.min.apply(null, heightArr);
let index = heightArr.indexOf(minHeight);
let top = heightArr[index];
let left = index === 0 ? leftWidth : rightWidth;
let obj = {
  width: imgWidth,
  height: imgHeight,
  src: item.src,
  top: top,
  left: left
};
that.data.contentArray.push(obj);
that.data.columnHeight[index] += imgHeight + space;

样式的优化

通过合理的样式设置和调整,可以使小程序的界面更加美观、流畅。比如我们可以根据不同屏幕大小和分辨率来调整图片大小和间距,或者使用动态的加载效果来提升用户体验。代码样例:

.content {
  width: 45%;
  margin: 5%;
  box-sizing: border-box;
  border-radius: 5px;
  overflow: hidden;
  box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.1);
  background-color: #fff;
}

.content image {
  display: block;
  margin: 0 auto;
}

通过本文的实践演示和技巧分享,相信读者已经对微信小程序实现瀑布流展示有了更加深入的了解。希望读者在实际开发中能够灵活运用这些知识,打造出更加出色的小程序作品。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

微信小程序实现瀑布流展示 的相关文章

随机推荐

  • 微信的转账记录删除了还能恢复吗?2个办法教你找回

    微信的转账记录删除了还能恢复吗 除了聊天记录外 好像还有很多朋友对于转账记录的恢复问题呼声也蛮高的 所以 小编这期就给大家带来找回微信转账记录的办法 分别有2个 赶紧进入正题 我们一起来看看到底是什么办法吧 方法1 手机微信上找回微信的转账
  • phpstrom查看代码总行数_一个统计PHP代码行数的小代码

    想统计一下项目中一共有多少行代码 结果没找到什么好的工具 就自己写了一个 效率不怎么样 Created by PhpStorm User luyanfeng Date 16 7 12 Time 下午1 45 param dir return
  • 【Qt】编译QtCreator

    一 Ubuntu14 04编译QtCreator 4 0 3 1 准备工作 编译工具要求 Qt gt 5 5 0 g gt 4 7 2 编译步骤 cd
  • python3字符串内括号匹配分析器匹配分析字符串内括号的匹配闭合情况

    python3字符串内括号匹配分析器 匹配分析字符串内括号的匹配闭合情况 可通过print打印匹配情况 高亮显示错误处 思路 遍历字符串 检测到起始括号后加入到open队列中 位置 字符 检测到闭合括号后检测队列最后一位是否是对应的起始括号
  • 洛谷P1085 不高兴的津津

    题目描述 津津上初中了 妈妈认为津津应该更加用功学习 所以津津除了上学之外 还要参加妈妈为她报名的各科复习班 另外每周妈妈还会送她去学习朗诵 舞蹈和钢琴 但是津津如果一天上课超过八个小时就会不高兴 而且上得越久就会越不高兴 假设津津不会因为
  • 对js对象、数组扁平化的理解

    数组 对象扁平化主要运用的有两个知识点 一个是数据类型的判断 另一个则是递归的运用 instanceof 判断数据类型 obj instanceof Object 判断对象 arr instanceof Array 判断数组 先来一段网上c
  • go高性能并发服务器,【Zinx第四章-全局配置】Golang轻量级并发服务器框架

    四 Zinx的全局配置 随着架构逐步的变大 参数就会越来越多 为了省去我们后续大频率修改参数的麻烦 接下来Zinx需要做一个加载配置的模块 和一个全局获取Zinx参数的对象 4 1 Zinx V0 4增添全局配置代码实现 我们先做一个简单的
  • 电脑重装按键是什么

    一般在使用u盘重装系统的时候 我们需要插入启动盘进电脑 然后开机按启动快捷键进入u盘启动pe系统内重装系统 那么重装系统按键是什么呢 下面 小编就把电脑重装系统按什么键的步骤分享给大家 工具 原料 系统版本 win10 品牌型号 联想yog
  • 组合、子集问题汇总

    子集的问题的思路也分两个方向 一种是解空间树是关于每个数选还是不选 结点取值范围就是true or false 解向量的长度是固定的 即candidates的个数 而且只有完全解才是问题的解 解向量不是直接的答案 而是标志每个candida
  • 【Matlab学习笔记】【函数学习】size参数

    size A 函数是用来求矩阵的大小的 你必须首先弄清楚A到底是什么 大小是多少 比如说一个A是一个3 4的二维矩阵 1 size A 直接显示出A大小 输出 ans 3 4 2 s size A 返回一个行向量s s的第一个元素是矩阵的行
  • mis服务器系统,MIS系统中服务器"推"技术的实现

    摘要 PUSH技术作为一项先进的信息传播技术 自1996年诞生以来 基于Web 的PUSH技术迅速发展 在Internet上得到了迅速而广泛的应用 本文从企业 管理系统的开发与应用角度出发 提出了基于MIS系统中实现和运用PUSH技术 的三
  • 嘉立创免费打板方法

    下载嘉立创下单助手软件 打开软件 在左侧领取下单优惠券 填写好下打样参数后 在优惠券中选择使用优惠券 即可免费打样 10CM 10CM以内 一个月限领2次优惠券 使用优惠券条件 当客户上个月的消费低于20元 甚至是无消费 我们也为完全用嘉立
  • halcon颜色识别

    halcon颜色识别 通过不同颜色在灰度图中的阈值范围不同来区分颜色 使用阈值分别选出不同的颜色 使用灰度平均值 循环读图进行处理 HSV模型区分颜色 通过不同颜色在灰度图中的阈值范围不同来区分颜色 使用阈值分别选出不同的颜色 dev cl
  • 使用loadrunner12选择谷歌录制,出现一直在加载的状态,进不去

    选择了浏览器和URL 点击录制 弹出浏览器 一直在加载 而且进入其他网址也进不去了 需要重新打开浏览器才可以 我本来以为是项目的问题 又打开了loadrunner自带的订票系统 发现在谷歌浏览器也是一样的 但是在ie浏览器却都可以正常打开
  • Java超过long型范围时使用的BigInteger和BigDecimal

    文章目录 前言 一 BigInteger 二 BigDecimal 前言 Java中当一个数的超过long型范围 能够表示64位的整数 时可以使用BigInteger和BigDecimal类型 一 BigInteger 推荐使用BigInt
  • 地震数据剖面图-matlab

    这里主要有四个参数需要设置 wigb m地震数据画图函数下载地址 a seismic data 地震数据 scale multiple data by scale 扫描频率 1 3 范围内任选一个数字 x x axis 所有道的位置信息 z
  • Java集合相关的常用工具类简介说明

    转自 Java集合相关的常用工具类简介说明 下文笔者将讲述java集合类中常用的工具类简介说明 如下所示 Java中的集合类既可以当做放其他数据的容器 又可以当做常见的数据结构使用 Java中提供了很多好用的工具类来操作这些集合类 java
  • 贪心 算法

    本文目录 1 部分背包问题 2 乘船问题 3 区间调度问题 4 区间覆盖问题 5 区间选点问题 6 小船过河 往返问题 7 硬币支付问题 8 字典序最小问题 9 最优装载问题 1 部分背包问题 问题描述 有n个物体 第i个物体的重量为wi
  • 文件exer1的访问权限为rw-r--r--,现要增加所有用户的执行权限和同组用户的写权限,下列哪个命令是对的?

    文件exer1的访问权限为rw r r 现要增加所有用户的执行权限和同组用户的写权限 下列哪个命令是对的 正确答案 A 你的答案 C 错误 chmod a x g w exer1
  • 微信小程序实现瀑布流展示

    在现代互联网时代 瀑布流展示方式越来越受到人们的青睐 其可以将海量的图片 商品等展示在界面上 不同大小的内容通过某种规律美观 有序地布局在网页或应用程序上 极大地提升了内容的呈现方式和用户体验 微信小程序在展示图片和商品等方面也可以采用瀑布