微信小程序实现容器图片流式布局功能,配合小程序原生框架使用。

小程序实现容器图片流式布局功能,因为目前论坛上也有很多博主出过类似的文章,这里我就以一个小白角度去讲一下如何实现的吧。给作者一点点鼓励,先点个赞赞吧👍,蟹蟹!!

目标

 实现下方效果图

技术栈 

微信小程序原生框架,wxml+wxss+js,因为后端是云开发的,所以网络请求是官方的api,比如wx.cloud.database().collection("community") .get()

这样做的好处

能根据图片的高度自适应容器高度,整体美观,易读

实现逻辑

1.页面布局wxml,一个大容器(宽度撑满屏幕高度)中,包含两列容器,左边一列,右边一列。如图所示,有图清晰一点。

2.首先获取一个数组dataList,用于渲染到页面上的数据,这里就用闲置帖子为例。

3.准备两个变量,一个是整型leftheight,作为左边容器实时高度,另一个是整型rightheight,作为右边容器实时高度。

4.获取数组后将回调值res中的data赋值给list局部变量,并循环这个list数组,同时判断左边的容器高度和右边的容器哪个更低,将子元素(子元素为对象)设置一个index属性标记属于左边容器,还是右边容器,这里的例子是index == 0 时候是左边容器,index==1时候是右边容器。每一次循环渲染子元素的时候判断左右容器高低,左边容器低则index设置为0标记到左边容器中去,否则亦反。

注意:picheight为数据库中数据已有的字段属性,为图片的高度

var that = this
var list = res.data //res.data为获取数据库中返回的数据数组 ,list为临时存储变量
var dataList = that.data.dataList //dataList为最终渲染到页面的数组数据
var leftheight = that.data.leftheight // 获取全局变量保存的左边容器高度
var rightheight = that.data.rightheight // 获取全局变量保存的右边容器高度for (let i = 0; i < list.length; i++) {//这里的picheight为存储到数据库时候的高度if (leftheight <= rightheight) {leftheight = leftheight + list[i].picheight + 120list[i].index = 0} else {rightheight = rightheight + list[i].picheight + 120list[i].index = 1}dataList.push(list[i])
}that.setData({dataList: dataList,leftheight: leftheight,rightheight: rightheight})

5.在wxml通过for循环渲染出来

部分关键代码:

 <view class="shop-big-box flex-row-center-x"><!-- 左列表 --><view class='shop'><block wx:for="{{dataList}}" wx:key="_id" wx:if="{{item.index == 0}}"><my-datalist item="{{item}}" index="{{index}}" data-src="{{item.pictures[0]}}" data-index="{{index}}" bind:getimage="getimage" /></block></view><!-- 右列表 --><view class='shop'><block wx:for="{{dataList}}" wx:key="_id" wx:if="{{item.index == 1}}"><my-datalist item="{{item}}" index="{{index}}" data-src="{{item.pictures[0]}}" data-index="{{index}}" bind:getimage="getimage" /></block></view></view>

my-datalist组件

<view class="shop-detail" bindtap="godetail" data-id="{{item._id}}"><view class='imagecont' style="height:{{item.picheight}}rpx;"><block wx:if="{{item.pictures.length > 0}}"><image src="{{item.pictures[0]}}" data-index="{{index}}" class="prodimg" style="height:{{item.picheight}}rpx;z-index: 3;"  mode="aspectFill" /></block></view></view><view style="width: 100%;display: flex;flex-wrap: wrap;height: 120rpx;"><view class="shop-detail-text">{{item.text}}</view><view class="shop-detail-user flex-row-center"><image src="{{item.user.imagavatares}}" style="border-radius: 50%;width: 30rpx;height: 30rpx;margin: 0 10rpx;background-color: rgb(247, 247, 247);" /><text>{{item.user.username}}</text></view></view>
</view>

完整代码

index.wxml 

<view class="shop-big-box flex-row-center-x"><!-- 左列表 --><view class='shop'><block wx:for="{{dataList}}" wx:key="_id" wx:if="{{item.index == 0}}"><my-datalist item="{{item}}" index="{{index}}" data-src="{{item.pictures[0]}}" data-index="{{index}}" bind:getimage="getimage" /></block></view><!-- 右列表 --><view class='shop'><block wx:for="{{dataList}}" wx:key="_id" wx:if="{{item.index == 1}}"><my-datalist item="{{item}}" index="{{index}}" data-src="{{item.pictures[0]}}" data-index="{{index}}" bind:getimage="getimage" /></block></view></view>

 index.wxss

.shop-big-box{width: 100%;
}.shop{width: 340rpx;margin: 0 10rpx;
}
/* 盒子水平摆放并水平居中 */
.flex-row-center-x{display: flex;flex-direction: row;justify-content: center;
}

index.js

// pages/index/index.js
const app = getApp()
const db = wx.cloud.database()
const _ = db.command
Page({/*** 页面的初始数据*/data: {dataList: [],leftheight: 0,rightheight: 0,},/*** 生命周期函数--监听页面加载*/onLoad() {this.getList()},getList() {var that = thiswx.cloud.database().collection("community").orderBy('top', 'desc').orderBy('date', 'desc').get({success(res) {console.log("出来的数据", res.data);if (res.data.length > 0) {var list = res.datavar dataList = that.data.dataListvar leftheight = that.data.leftheightvar rightheight = that.data.rightheightfor (let i = 0; i < list.length; i++) {if (leftheight <= rightheight) {leftheight = leftheight + list[i].picheight + 120list[i].index = 0} else {rightheight = rightheight + list[i].picheight + 120list[i].index = 1}dataList.push(list[i])}that.setData({dataList: dataList,leftheight: leftheight,rightheight: rightheight,})} },fail(err) {wx.showToast({title: '网络出错啦!' + err,icon: 'none'})}})},})

index.json

{"usingComponents": {"my-datalist": "../../components/datalist/datalist"},"navigationStyle": "custom","enablePullDownRefresh": true
}

 components/datalist.js

const app = getApp()
const db = wx.cloud.database()
const _ =db.command
Component({properties: {item: JSON,index:String,},methods: {godetail(e) {wx.navigateTo({url: '/pages/Filecommunity/detail/detail?id=' + e.currentTarget.dataset.id,})},getimage() {this.triggerEvent('getimage');},},
});

 components/datalist.json

{"component": true,"usingComponents": {}
}

 components/datalist.wxml

<view class="shop-detail" bindtap="godetail" data-id="{{item._id}}"><view class='imagecont' style="height:{{item.picheight}}rpx;"><block wx:if="{{item.pictures.length > 0}}"><image src="{{item.pictures[0]}}" data-index="{{index}}" class="prodimg" style="height:{{item.picheight}}rpx;z-index: 3;" mode="aspectFill" /></block></view><view style="width: 100%;display: flex;flex-wrap: wrap;height: 120rpx;"><view class="shop-detail-text">{{item.text}}</view><view class="shop-detail-user flex-row-center"><image src="{{item.user.imagavatares}}" style="border-radius: 50%;width: 30rpx;height: 30rpx;margin: 0 10rpx;background-color: rgb(247, 247, 247);" /><text>{{item.user.username}}</text></view></view>
</view>

 components/datalist.wxss


.shop-detail{border-radius: 10rpx;width: 340rpx;background: #fff;display: inline-block;font-size: 28rpx;margin: 10rpx 0;
}.shop-detail-text{font-size: 28rpx;width: 100%;margin: 10rpx 0;overflow:hidden;white-space:nowrap;display: -webkit-box;-webkit-line-clamp: 1;-webkit-box-orient: vertical;
}
.shop-detail-user{display: flex;flex-direction: row;align-items: center;overflow:hidden;white-space:nowrap;font-size: 24rpx;height: 26rpx;margin: 10rpx 0 10rpx 0;text-overflow: ellipsis;width: 100%;
}.imagecont{width: 100%;font-size: 0;position: relative;
}
.prodimg {width: 100% !important;vertical-align: middle !important;border-radius: 10rpx !important;position: absolute !important;font-size:0 !important;}
/* 盒子水平摆放并垂直居中 */
.flex-row-center{display: flex;flex-direction: row;align-items: center;
}

这篇对您有所帮助的话,来个点赞或关注吧❀❀~,另外要预览效果的可以搜索邑学宝微信小程序呦~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/17541.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sonar3 使用 api/measures/componet 获取代码当,Java实现

最近团队在做一个技术架构相关的优化&#xff0c;当前的目标是想要通过代码量&#xff0c;系统架构入手。先统计到部门的代码量&#xff0c;如何进行代码行数的统计呢&#xff0c;因为我们采用的是Java技术栈&#xff0c;我就Java技术栈进行说明。 1、如何统计代码行数 要统计…

ZYNQ AXI4 FDMA内存读写

1 概述 如果用过ZYNQ的都知道,要直接操作PS的DDR 通常是DMA 或者VDMA,然而用过XILINX 的DMA IP 和 VDMA IP,总有一种遗憾,那就是不够灵活,还需要对寄存器配置,真是麻烦。对于我们搞 FPGA 的人来说,最喜欢直接了当,直接用FPGA代码搞定。现在XILINX 的总线接口是AXI4总线…

latex中复制到word里面之后如何转变成word自带的公式

详细步骤如下&#xff1a; 第一步&#xff0c;将latex中的公式复制到word里面&#xff0c;例如&#xff1a;$r_1^d$ 第二步&#xff0c;选中$$里面的部分&#xff0c;也就是去掉$$&#xff0c;选中剩余的部分&#xff0c;例如&#xff1a;r_1^d 第三步&#xff0c;word工具栏里…

【代码随想录】【算法训练营】【第21天】 [530]二叉搜索树的最小绝对差 [501]二叉搜索树的众数 [236]二叉树的最近公共祖先

前言 思路及算法思维&#xff0c;指路 代码随想录。 题目来自 LeetCode。 day 21&#xff0c;天气不错的周二~ 题目详情 [530] 二叉搜索树的最小绝对差 题目描述 530 二叉搜索树的最小绝对差 解题思路 前提&#xff1a;二叉搜索树 思路&#xff1a;根据二叉搜索树的中…

长安链使用Golang编写智能合约教程(二)

本篇说的是长安链2.3.的版本的智能合约&#xff0c;虽然不知道两者有什么区别&#xff0c;但是编译器区分。 教程三会写一些&#xff0c;其他比较常用SDK方法的解释和使用方法 编写前的注意事项&#xff1a; 1、运行一条带有Doker_GoVM的链 2、建议直接用官方的在线IDE去写合…

奥枫软件Java要个16K遇到地狱级难度,醉了。。。

我只能说地狱难度&#xff0c;没绝对把握就别去了。我凭借前辈的经验&#xff0c;和当时天时地利人和&#xff0c;六道题答得很不错&#xff0c;但还是没通过。我有备而来都没过&#xff0c;现场写那些应该都是白忙活了。 一面 1&#xff0c;分割一个整数。如123&#xff0c;结…

抖音本地生活服务商入驻指南分享!

当前&#xff0c;各大平台的团购外卖业务持续火爆&#xff0c;并逐渐成为众多创业赛道中的大热门。其中&#xff0c;本地生活服务更是在短时间内杀出重围&#xff0c;成为创业者们的首选。 根据抖音生活服务近日发布的《2023年度数据报告》&#xff0c;2023年&#xff0c;抖音生…

2024年湖北水平能力测试能搞定吗?

武汉中级职称报名正式高一段落&#xff0c;意味着今年武汉市中级职称报名除开东湖高新区之外&#xff0c;其余地方都已经正式截止了&#xff0c;那么接下来大家都在准备6月中下旬的水平能力测试考试。 水平能力测试分为两种&#xff1a;面试答辩或者笔试机考试卷&#xff0c;面…

vue脚手架与创建vue项目

一、前言 vue脚手架的安装与创建vue项目需要先行安装配置node与npm&#xff0c;详情可以看node、npm的下载、安装、配置_node 下载安装-CSDN博客 二、vue脚手架的使用 1、vue与vue脚手架的版本 Vue脚手架&#xff08;Vue CLI&#xff09;是Vue.js官方提供的一个命令行工具&…

【基础篇-Day8:JAVA字符串的学习】

目录 1、常用API2、String类2.1 String类的特点2.2 String类的常见构造方法2.3 String类的常见面试题&#xff1a;2.3.1 面试题一&#xff1a;2.3.2 面试题二&#xff1a;2.3.3 面试题三&#xff1a;2.3.4 面试题四&#xff1a; 2.4 String类字符串用于比较的方法2.5 String类字…

埃隆·马斯克的 xAI 募集 60 亿美元,瞄准 AI 超级计算机|TodayAI

埃隆马斯克&#xff08;Elon Musk&#xff09;创立的人工智能公司 xAI 宣布成功募集了 60 亿美元的资金&#xff0c;用于推动其“首批产品推向市场&#xff0c;建立先进的基础设施&#xff0c;并加速未来技术的研发”。马斯克透露&#xff0c;xAI 目前的估值已达到 180 亿美元&…

如何简化不同网间文件摆渡的操作流程,降低IT人员工作量?

为了保护内部核心数据不被泄露&#xff0c;同时有效屏蔽外部网络攻击的风险&#xff0c;企业大多会选择实施网络隔离。将“自己人”与“外人”隔离&#xff0c;具有较强的安全敏感性。有些企业还会在内部网络中进一步划分&#xff0c;比如划分为研发网、办公网、生产网等&#…

PaliGemma – 谷歌的最新开源视觉语言模型(一)

引言 PaliGemma 是谷歌推出的一款全新视觉语言模型。该模型能够处理图像和文本输入并生成文本输出。谷歌团队发布了三种类型的模型&#xff1a;预训练&#xff08;PT&#xff09;模型、混合&#xff08;Mix&#xff09;模型和微调&#xff08;FT&#xff09;模型&#xff0c;每…

【Django】从零开始学Django【2】

五. CBV视图 Django植入了视图类这一功能&#xff0c;该功能封装了视图开发常用的代码&#xff0c;无须编写大量代码即可快速完成数据视图的开发&#xff0c;这种以类的形式实现响应与请求处理称为CBV(Class Base Views)。 1. 数据显示视图 数据显示视图是将后台的数据展示…

LED屏控制卡是如何控制LED屏的?

LED屏控制卡是LED显示屏的关键组件之一&#xff0c;负责将输入的画面信息转换为LED屏能够显示的数据和控制信号。以下是LED屏控制卡的工作原理和功能的详细介绍&#xff1a; 1. LED显示屏控制器概述&#xff1a; LED显示屏控制器是LED显示屏的核心部件之一&#xff0c;也称为LE…

记一次Chanakya靶机的渗透测试

Chanakya靶机渗透测试 首先通过主机发现发现到靶机的IP地址为:172.16.10.141 然后使用nmap工具对其进行扫描:nmap -sC -sV -sS -p- 172.16.10.141 发现目标靶机开启了80,22,21等多个端口&#xff0c; 访问80端口,发现是一个普通的页面,点击进入多个界面也没有其他有用的信息,然…

Openai革新AI陪伴赛道?国内的AI陪伴创业公司有哪些?

人是一切社会关系的总和&#xff0c;而人的这种社会关系又依靠着情感来联系的。但是自从陪伴式AI的出现仿佛就打破了这种传统的关系。 在你的身边有这样一个“人”&#xff0c;她善解人意、风趣幽默&#xff0c;不会发脾气还会随时陪伴着你&#xff0c;这一在科幻电影中才会出现…

Linux-----sed案例练习

1.数据准备 准备数据如下&#xff1a; [rootopenEuler ~]# cat openlab.txt My name is jock. I teach linux. I like play computer game. My qq is 24523452 My website is http://www.xianoupeng.com My website is http://www.xianoupeng.com My website is http://www.…

振弦采集仪在岩土工程地质灾害监测中的可行性研究

振弦采集仪在岩土工程地质灾害监测中的可行性研究 引言&#xff1a; 岩土工程地质灾害是指在岩土体中由于自然力和人类活动等因素引起的&#xff0c;对人类生活、财产以及环境造成威胁的灾害。为了及时发现并准确监测地质灾害的发生和演化过程&#xff0c;振弦采集仪作为一种新…

计网期末复习指南:物理层(物理层的任务、香农公式、常用信道复用技术)

前言&#xff1a;本系列文章旨在通过TCP/IP协议簇自下而上的梳理大致的知识点&#xff0c;从计算机网络体系结构出发到应用层&#xff0c;每一个协议层通过一篇文章进行总结&#xff0c;本系列正在持续更新中... 计网期末复习指南&#xff08;一&#xff09;&#xff1a;计算机…