uniapp自定义多列瀑布流组件项目实战总结

 更新时间:2023年09月20日 09:23:53   作者:MarkGuan  
这篇文章主要为大家介绍了uniapp自定义多列瀑布流组件实战总结,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

导语

有时候展示图片等内容,会遇到图片高度不一致的情况,这时候就不能使用等高双列或多列展示了,这时候会用到瀑布流的页面布局,下面就一起探讨一下瀑布流的实现方法。

准备工作

  • pages/index文件夹下面新建一个waterfall.vue的组件;
  • 按照前面文章所说的页面结构,编写好预定的瀑布流案例页面;
  • 在网上找几张免费的图片素材;

原理分析

主要是根据图片的高度自动比较每列的总高度,根据uni.getImageInfo获取到图片高度,然后哪列低,就给哪列补充图片,直至图片列表循环完毕。

实战演练

模板使用

下面就是循环列和图片。

<view class="waterfall-page">
  <view
    class="waterfall-page-column"
    v-for="(item, index) in waterfall.columnList"
    :key="index"
    ref="column"
  >
    <view
      class="waterfall-page-item"
      v-for="(pItem, pIndex) in item"
      :key="pIndex"
    >
      <image class="waterfall-page-img" :src="pItem" mode="widthFix"></image>
    </view>
  </view>
</view>

样式编写

.waterfall-page {
  display: flex;
  align-items: flex-start;
  .waterfall-page-column {
    box-sizing: border-box;
    flex: 1;
    padding: 0 10rpx;
    width: 0;
    .waterfall-page-item {
      margin-bottom: 10rpx;
      .waterfall-page-img {
        display: inline-block;
        width: 100%;
      }
    }
  }
}

脚本使用

  • 定义数据
// 瀑布流信息
const waterfall = reactive({
  // 图片列表
  imgList: [
    "/static/image/waterfall/pic-01.jpg",
    "/static/image/waterfall/pic-07.jpg",
    "/static/image/waterfall/pic-03.jpg",
    "/static/image/waterfall/pic-07.jpg",
    "/static/image/waterfall/pic-05.jpg",
    "/static/image/waterfall/pic-07.jpg",
    "/static/image/waterfall/pic-01.jpg",
    "/static/image/waterfall/pic-03.jpg",
    "/static/image/waterfall/pic-07.jpg",
  ],
  columnList: [], // 每列图片
  columnHeight: [], // 每列图片高度
  columnCount: 2, // 总列数
});
  • 初始化数据
// 初始化数据
function initData() {
  for (var i = 0; i < waterfall.columnCount; i++) {
    waterfall.columnList.push([]);
    waterfall.columnHeight.push(0);
  }
}
  • 计算方法
// 设置瀑布流布局
async function setWaterfallLayout() {
  for (var i = 0; i < waterfall.imgList.length; i++) {
    let item = waterfall.imgList[i];
    try {
      let imgInfo = await uni.getImageInfo({
          src: item,
        }),
        h = imgInfo.height;
      for (let j = 0; j < waterfall.columnCount - 1; j++) {
        let prevIndex = j,
          nextIndex = j + 1;
        if (
          waterfall.columnHeight[prevIndex] <= waterfall.columnHeight[nextIndex]
        ) {
          waterfall.columnList[prevIndex].push(item);
          waterfall.columnHeight[prevIndex] += h;
        } else {
          waterfall.columnList[nextIndex].push(item);
          waterfall.columnHeight[nextIndex] += h;
        }
      }
    } catch (error) {
      console.log(error);
    }
  }
}

案例展示

h5 端效果

小程序端效果

APP 端效果

以上就是uniapp自定义多列瀑布流组件实战总结的详细内容,更多关于uniapp多列瀑布流组件的资料请关注脚本之家其它相关文章!

相关文章

  • js出生日期 年月日级联菜单示例代码

    js出生日期 年月日级联菜单示例代码

    本篇文章主要介绍了js出生日期 年月日级联菜单的示例代码。需要的朋友可以过来参考下,希望对大家有所帮助
    2014-01-01
  • JS对象转换为Jquery对象示例

    JS对象转换为Jquery对象示例

    JS对象转换为Jquery对象的方便在于可以使用jquery的一些方法,下面有个示例,大家可以参考下
    2014-01-01
  • js实现五星评价功能

    js实现五星评价功能

    本文主要介绍了js实现五星评价功能和印象评价功能的实例,具有很好的参考价值。下面跟着小编一起来看下吧
    2017-03-03
  • javascript 获取函数形参个数

    javascript 获取函数形参个数

    本节主要介绍了javascript获取函数形参个数的具体实现,需要的朋友可以参考下
    2014-07-07
  • 手把手教你用Javascript实现观察者模式

    手把手教你用Javascript实现观察者模式

    这篇文章主要为大家介绍了Javascript观察者模式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-12-12
  • JavaScript实现枚举的几种方法总结

    JavaScript实现枚举的几种方法总结

    在前端开发中,我们可能经常需要用到枚举,使用枚举的好处是为了让代码的可读性更强,避免直接使用数字或未知的字符串,但是在JavaScript中,要自己实现一个枚举功能,那么大家能想到多少种实现枚举的方法呢,我将介绍几种实现枚举的好方法
    2023-08-08
  • js操作CheckBoxList实现全选/反选(在客服端完成)

    js操作CheckBoxList实现全选/反选(在客服端完成)

    对于CheckBoxList控件来说,一方面要实现大量数据在服务器端的绑定工作,另一方面往往要求实现全选、反选等功能,接下来将介绍js操作CheckBoxList实现全选/反选,感兴趣的朋友可以了解下,或许对你有所帮助
    2013-02-02
  • Bootstrap每天必学之导航

    Bootstrap每天必学之导航

    Bootstrap每天必学之导航,本文讲解的就是大家在做项目时一定会接触到的导航,感兴趣的小伙伴们可以参考一下
    2015-11-11
  • JavaScript中常用的3种弹窗(警告框、确认框、提示框)

    JavaScript中常用的3种弹窗(警告框、确认框、提示框)

    JavaScript提供了几种常用的弹窗方法,用于与用户进行交互或显示提示消息,这篇文章主要给大家介绍了关于JavaScript中常用的3种弹窗的相关资料,分别包括警告框、确认框、提示框,需要的朋友可以参考下
    2023-09-09
  • Next.js15图片查看网站之图片右键菜单的兼容优化与坑

    Next.js15图片查看网站之图片右键菜单的兼容优化与坑

    Next.js 提供了内置的图片和字体优化功能,旨在提升应用性能和用户体验,下面这篇文章主要介绍了Next.js15图片查看网站之图片右键菜单的兼容优化与坑的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2026-03-03

最新评论