首页 > 其他分享 >uniapp 实现瀑布流布局 (网上找不到合适的方法 就进来看看我的吧)

uniapp 实现瀑布流布局 (网上找不到合适的方法 就进来看看我的吧)

时间:2024-09-03 13:03:24浏览次数:10  
标签:uniapp 高度 1px item 瀑布 合适 left 图片

最近自己在开发一款小程序,目的是为了学习,包括后端 也是我自己在写 后端用的是Ruoyi框架

小程序这边呢 原生的我会 uniapp 久闻大名 却从未试手 于是选择了uniapp写微信小程序

话不多说 内容展示的时候 我选择了使用小红书 咸鱼等都在使用的瀑布流布局,出于两个原因

1 个人觉得很好看

2 对于图片的展示很到位 我做的是一个球场类的小程序 球场图片横着拍 竖着拍的都有 那么这种情况下

只有保证宽度一致 高度自适应的方式 才能让图片既不变形 又能在显示区域内 完全显示 不留空白

在web端做一个瀑布流布局是很简单的 大家都知道 css + js 定位 维护高度列表....

但是在uniapp这边 尤其是还要顾着小程序/h5/app等 可以使用的方法就不多了,我在写之前也是

各种百度 各种ai 但是我得到的信息 真的很少 也有 但是我觉得有点复杂(要维护图片高度的列表 还要计算图片下面标题所占的行数 万一我标题下面还有其他东西呢 又得计算一大堆) 不是我想要的 于是决定自己写了

看图:

在这里插入图片描述

这两个大框框外还有一个盒子 相对定位 这两个大框框绝对定位到如图

然后维护两个数据list 每次先判断左右两个大盒子的高度 那个高度小 就往哪个里面的list push数据

这样的方式有如下几个好处:

1 不用维护高度的列表

2 不用提前加载图片 去获取图片的宽高 避免了加载慢以及频繁获取图片宽高带来的闪屏的影响

3 每个小框框里面的内容不限 你可以放任何你想放的东西 标题也可以取得很长 因为我们是根据大框框的高度 来放元素的

4 代码简单 逻辑易懂

下面是一些核心的代码

<div class="container">
		<div class="left">
			<div v-for="item in leftList" :key="item.id" class="containerItem">
				<div style="width: 100%;position: relative;">
					<image :src="item.courtImage" style="width: 100%;" mode="widthFix"></image>
					<span class="priceShowSpan" :class="!item.price ? '' :'needMoney'">
						{{!item.price?'免费':item.price + '元/人'}}
					</span>
				</div>
				<div>
					{{item.courtName}}
				</div>
			</div>
		</div>
		<div class="right">
			<div v-for="item in rightList" :key="item.id" class="containerItem">
				<div style="width: 100%">
					<image :src="item.courtImage" style="width: 100%;" mode="widthFix"></image>
				</div>
				<div>
					{{item.courtName}}
				</div>
			</div>
		</div>
	</div>
mounted(){
		  this.getHeight(".left",".right")
	  },
	  methods:{
		 getHeight(selector1,selector2) {
		    const query = uni.createSelectorQuery().in(this);
			query.select(selector1).boundingClientRect(data => {
				// 第一个高度
				let leftheight = data.height
				
				const query2 = uni.createSelectorQuery().in(this);
				query2.select(selector2).boundingClientRect(data => {
					// 第二个高度
					let rightheight = data.height
					this.insertToList(leftheight,rightheight)
				}).exec();
			}).exec();
		 },
		 insertToList(left,right){
			 console.log(left,right)
			 if(left <= right){
				 this.leftList.push(this.listRender[this.insertIndex])
			 }else{
				 this.rightList.push(this.listRender[this.insertIndex])
			 }
			 this.insertIndex++
			 if(this.insertIndex != this.listRender.length){
				 this.getHeight(".left",".right")
			 }
		 }
	  }
	}
.container{
    width: 100%;
	position: relative;
}
.containerItem{
    display: flex;
    flex-direction: column;
    align-items: center;
	border-radius: 5px;
	border:1px solid #ffffff;
	overflow: hidden;
	margin: 10px 0;
	box-shadow: 1px 1px 20px 1px #2A3A30;
}
.left{
	position: absolute;
	left:0%;
	width: 49%;
}
.right{
	position: absolute;
	left:51%;
	width: 49%;
}

如此这般 你就得到了一个瀑布流布局

看一下效果还是:

在这里插入图片描述

看到这里了 希望能够帮到你

如此这般 你就得到了一个瀑布流布局

看一下效果还是:

[外链图片转存中...(img-Csg1FdPT-1725338302496)]

看到这里了 希望能够帮到你

我这个呢 目前是在开发阶段 没有测试数据很多 以及 下拉加载的情况
如果有朋友用了我的方法 有任何问题 我们可以一起讨论 感谢感谢

标签:uniapp,高度,1px,item,瀑布,合适,left,图片
From: https://www.cnblogs.com/ly5926/p/18394331

相关文章

  • 如何为你的 LLM 应用选择最合适的 Embedding 模型
    如果你正在构建2024年的生成式人工智能(GenAI)应用,你现在可能已经听过几次"嵌入(embedding)"这个词了,而且每周都能看到新的嵌入模型上架。那么,为什么会有这么多人突然关心起嵌入这个自20世纪50年代就存在的概念呢?如果嵌入如此重要,而且您必须使用它们,那么您该如何在众......
  • uniapp 微信小程序获取头像,上传服务器
    html头像UI<buttonclass="user-avatarflex-center"open-type="chooseAvatar"@chooseavatar="onChooseAvatar"><imageclass="img":src="showAvatat()"mode="scaleToFill"/>......
  • uniapp手机端和html中使用mqtt
    最近的项目用到了mqtt,我想了想,还是记下来吧,毕竟我也废了很长的时间在这个上面,首先是uniapp中使用mqtt,查阅了一些资料,前辈们都说使用3.0.0版本,于是我就下载了3.0.0版本的来使用[email protected]在mqtt连接之前要先引入importmqttfrom'mqtt/dist/mqtt.js';......
  • uniapp手机端页面滚动到最底部
    最近用uniapp开发一个类似于微信聊天功能的手机端软件,在进入聊天页面时要求页面滚动到最底部,刚开始使用了下面的代码:uni.createSelectorQuery().select("自己的容器.box").boundingClientRect((res)=>{console.log(res)constscrollH=res.top;uni.pageSc......
  • uniapp精仿支付宝UI界面,首页/理财/消息/生活/口碑/我的,还有模拟支付宝扫码支付/收付款
    sumer-alipay介绍uniapp精仿支付宝UI界面,首页/理财/消息/生活/口碑/我的,还有模拟支付宝扫码支付/收付款等功能,界面漂亮颜值高,视频商城小工具等,蚂蚁森林种树养鸡农场偷菜样样齐用于视频,商城,直播,聊天,等等场景完全开源无任何代码加密使用Hbuilder导入插件即可使用。无后......
  • uniapp精仿微信源码,基于SumerUI 3.0和Uniapp前端框架的一款仿微信APP应用,界面漂亮颜值
    sumer-weixin介绍uniapp精仿微信,基于SumerUI3.0和Uniapp前端框架的一款仿微信APP应用,界面漂亮颜值高,视频商城小工具等,朋友圈视频号即时聊天用于视频,商城,直播,聊天,等等场景,源码分享源码说明:本源码包只提供1.0版本,只有1.0版本是开源的,提供给大家学习研究。源码使用Hbui......
  • CSS瀑布流实现
    文章目录前言前置知识React中实现代码实现Vue中实现代码实现前言瀑布流是一种CSS布局技术,它允许不同高度的元素在页面上以美观的方式排列,同时保持行与列间的间距一致。前置知识使用multi-column实现多列布局column-count:设置布局显示的列数。column-gap......
  • vue3+TS+vite实现瀑布流列表
    安装依赖npminstallvue-waterfall-plugin-nextvue文件中引入使用<scriptsetuplang="ts">import{RouterLink}from'vue-router'import{Waterfall}from'vue-waterfall-plugin-next'import'vue-waterfall-plugin-next/dist......
  • python+uniapp微信小程序 个性化网上商城购物商铺系统 3rc1k
    目录前言功能介绍技术栈系统截图核心代码系统设计操作可行性可行性论证详细视频演示个人心得/源码获取个人心得源码获取前言......
  • 基于SpringBoot+Vue+uniapp的网络游戏交易系统(源码+lw+部署文档+讲解等)
    文章目录前言详细视频演示具体实现截图技术栈后端框架SpringBoot前端框架Vue持久层框架MyBaitsPlus系统测试系统测试目的系统功能测试系统测试结论为什么选择我代码参考数据库参考源码获取前言......