微信小程序 - - - - - 瀑布流效果实现

这篇具有很好参考价值的文章主要介绍了微信小程序 - - - - - 瀑布流效果实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

对于一些小程序,关于瀑布流的需求是很正常的,瀑布流看起来确实很舒服,但是具体该如何实现呢?

下文给出的方式是: js + css

1. 瀑布流

1.1 什么叫瀑布流?

瀑布流,又称瀑布流式布局
是比较流行的一种网站页面布局,视觉表现为参差不齐的多栏布局,随着页面滚动条向下滚动,这种布局还会不断加载数据块并附加至当前尾部

1.2 瀑布流有什么优点?

  • 以图片为主的展示页面
  • 图片尺寸不一交错排布
  • 空间使用更加充分,节省了空间

1.3 如何实现瀑布流的关键是什么?

根据1.1的解释,可以解析出如下两点:

  • 参差不齐: 就是说瀑布流card的高度是不一致
  • 不断加载数据块并附加至当前尾部: 就是说新加载的数据,一直追加到现有数据列表的底部

2. 实现思路

2.1 思路梳理

由1.1、1.2、1.3,相信对于瀑布流已经有了一定的概念,接下来就是如何实现瀑布流。

实现瀑布流的关键点在于:

  • 分别存储当前列的渲染数据、高度数据
  • 新数据应该往哪一列进行追加

2.2 实现瀑布流

假设场景如下:
这是一个商城类的小程序,只需要两列数据即可。上拉加载数据后,自动排列到两侧对应的列表里。

代码如下:

const app = getApp()
var leftHeight = 0, // 左侧列表累计高度
  rightHeight = 0; // 右侧列表累计高度

var commonHeight = 210; // 瀑布流卡片 除图片外的固有高度
Page({
  data: {
    page: 1,
    leftGoods: [], // 左侧列表渲染数据
    rightGoods: [] // 右侧列表渲染数据
  },
  onLoad() {
    // 初始化
    this.init()
  },

  init() {
    // 初始化两侧累计高度、两侧列表数据
    // 重新通过接口获取数据
    leftHeight = 0
    rightHeight = 0
    this.setData({
      leftGoods: [],
      rightGoods: []
    }, () => {
      this.getGoodsList();
    })
  },


  // 获取商品数据
  getGoodsList() {
    const _this = this;
    const {
      page
    } = this.data
    app.http.request('/goods-list', {
      page
    }).then(res => {
      const {
        ec,
        data
      } = res
      if (ec == 200) {
        // 解构出当前存储的数据
        const {
          leftGoods,
          rightGoods
        } = this.data

        // 对返回值里的数据进行处理
        data.list.map(item => {
          // 解构出每张图片的宽高值
          const {
            height,
            width
          } = item.img

          // 计算图片宽高比
          const aspectRatio = width / height

          // 计算图片真实渲染的高度
          let realHeight = 340 / aspectRatio

          // 优先给左侧列表添加数据
          // 只要左侧累计高度不大于右侧累计高度,就给左侧添加;否则就给右侧添加
          // 列表添加数据,对应累计高度也应调整
          if (leftHeight <= rightHeight) {
            leftGoods.push(item)
            leftHeight = leftHeight + realHeight + commonHeight
          } else {
            rightGoods.push(item)
            rightHeight = rightHeight + realHeight + commonHeight
          }

          // 数据处理完成,进行存储
          _this.setData({
            leftGoods,
            rightGoods,
          })
        })
      } else {
        wx.showToast({
          icon: 'error',
          title: '加载数据失败',
        })
      }
    })
  },

  // 划到底部 加载更多
  lower: app.throttle(function () {
    const {
      page
    } = this.data
    this.setData({
      page: page + 1
    }, () => {
      this.getGoodsList()
    })
  }, 500),

})

现在处理好了要渲染的数据,接下来只需要在页面进行布局渲染即可!文章来源地址https://www.toymoban.com/news/detail-584544.html

到了这里,关于微信小程序 - - - - - 瀑布流效果实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • css+js瀑布流布局实现

    记录一个瀑布流布局问题的解决过程 最开始使用js实现,将 子元素进行绝对定位,根据宽高及顺序判断定位的top与left 。 问题 :存在新增子元素页面加载不及时的问题,会出现子元素初始状态叠加在一起,计算完成后才能正常显示。 点击查看代码 再次尝试使用css中的colum

    2024年02月04日
    浏览(24)
  • 瀑布流布局(CSS flex实现)

    关键点 使用了 vw 进行自适应缩放 html:

    2024年02月07日
    浏览(34)
  • vue3实现瀑布流布局组件

    先看效果图 直接上代码 utils.js data.js 模拟后台返回的数据 瀑布流布局组件 waterfall.vue 使用该组件(这里 columns 写死了3列) 若要响应式调整列数,可参考以下代码 瀑布流布局组件监听 columns 变化

    2024年02月21日
    浏览(39)
  • 实现瀑布流布局的四种方法

    页面上是一种 参差不齐 的多栏布局,类似上图所示随着页面滚动条向下滚动,这种布局还会不断加载数据块并附加至当前尾部,大部分为图片,图片 固定 宽度,高度 不一 ,根据原比例缩放到宽度达到固定的要求,每行排满后,新的图片添加到后面 固定宽度,高度不一 岑

    2023年04月15日
    浏览(47)
  • 微信小程序--瀑布流

    本文使用了微信小程序第三方组件库 Lin UI 。 Lin UI 是基于 微信小程序原生语法 实现的组件库。遵循简洁,易用的设计规范。 Lin UI 中封装了瀑布流的组件,使用方法也比较简单,但是写法让我不是很理解,因此决定下载源码研究。 以下将从 如何使用 , 源码研究 , 源码改

    2024年02月09日
    浏览(25)
  • 微信小程序瀑布流组件

    1.创建文件夹    /components/waterfall/  文件夹结构如图 各文件内容: 我这里直接就是写死了两列排列 然后在用到该组件的页面文件夹下  .json 文件夹中引入 注意:文件路径不要写错了!!!这里只是一个参考  然后使用该组件  对其dataArr【 注意:我这里定义的是dataArr!!! 】

    2024年02月16日
    浏览(32)
  • 微信小程序的无限瀑布流写法

    微信小程序的无限瀑布流实现总算做完了,换了好几种方法,过程中出现了各种BUG。 首先官方有瀑布流的插件(Skyline /grid-view),不是原生的我就不想引入,因为我的方块流页面已经搭好了,引入说不定就要涉及样式的修改、代码量的增大等麻烦问题。 H5我虽然也做了瀑布流

    2024年02月07日
    浏览(31)
  • 微信小程序瀑布流和虚拟列表

    首先声明虽然本篇是写的微信小程序的案例,但是也可用于H5,思路是想通的,只是有些api的差异,最后会贴代码片段 虚拟列表 一般在做长列表优化时,特别是面试时,虚拟列表就是个高频词。这个名词听起来很高级,其实原理很简单 虚拟列表就是将需要渲染的数组数据改

    2024年02月14日
    浏览(27)
  • 微信小程序实现翻效果

    最近要在微信小程序里实现一个类似翻页的场景,网上翻看了多个案例无非就两种实现,第一种通过css 3d变换+动画实现,第二使用Turn.js现成库。前者实现效果一般,后者js库是基于古老的JQuery来实现的并没办法移植到小程序了里。 下面就自己调研了一下turnjs来实现小程序的

    2024年02月12日
    浏览(32)
  • 微信小程序 实现进度条效果

    微信小程序中的原生进度条组件(Progress)只能显示一种进度状态,但有时我们需要展示多种状态,比如预算已使用与本次申请的进度。为了实现这一功能,我采用了 canvas 来绘制多种状态的进度条。记录下小程序原生组件 Progress 的单状态使用,以及通过 canvas 实现多状态进度

    2024年04月17日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包