uniapp社区动态实战:根据图片数量动态改变图片大小

     动态列表是各种社交属性软件中最常见的场景,其中用户在发布动态时一般会添加1-9张图片,不同的数量图片显示大小也会不同,下面就聊一下如何根据不同的图片数量动态改变图片大小。以下案例中最多支持9张图显示,每行做多显示3张,多余则进行换行,图片默认的宽高比为1:1.2。
     首先看下0-9张图片时对应的图片显示尺寸(以下展示按照图片数量从小到大展示)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

     简单说下实现思路:
          根据图片数量进行划分等级,具体实现内容如下:

没有图片时图片盒子设置默认值; 1张图片时图片固定宽高为200px,240px.
2-3张图片时图片固定宽高为(屏幕宽度-左右padding)/图片个数.盒子高度为图片高度,不需换行;
4-6张图片时图片固定宽高为(屏幕宽度-左右padding)/3.盒子高度为图片高度的两倍,需要设置换行;
7-9张图片时图片固定宽高为(屏幕宽度-左右padding)/3.盒子高度为图片高度的三倍,需要设置换行;

     屏幕宽度可以使用uni.getSystemInfo进行获取,注意单位为px.说下实现过程中遇到的问题:uni.getSystemInfo的success回调函数中是获取不到data中的属性的,这里处理的方式是重新定义一个变量that进行赋值.具体实现可参考代码.用户的头像使用的是uview中的u-avatar,使用时需要引入uview相关文件.
     下面直接上代码:

<template><view><view class="user_class"><u-avatar src="/static/logo.png" size="20"></u-avatar><text>小美</text></view><view class="content"><text>ChatGPT嵌入Office,以后做EXCEL动动嘴就行了!AI时代全面降临</text></view><view class="img_class" :style="'heigt:'+imgClassHeight+'rpx;'"><view class="img_content" v-if="imgClassHeight != 5" :style="'flex-wrap:'+imgClassFlexWrap"><image src="../../static/dynamic_1.png" mode="scaleToFill" :style="'height:'+imgHeight+'px;'+'width:'+imgWidth+'px'"></image><image src="../../static/dynamic_2.png" mode="scaleToFill" :style="'height:'+imgHeight+'px;'+'width:'+imgWidth+'px'"></image><image src="../../static/dynamic_3.png" mode="scaleToFill" :style="'height:'+imgHeight+'px;'+'width:'+imgWidth+'px'"></image><image src="../../static/dynamic_4.png" mode="scaleToFill" :style="'height:'+imgHeight+'px;'+'width:'+imgWidth+'px'"></image><image src="../../static/dynamic_5.png" mode="scaleToFill" :style="'height:'+imgHeight+'px;'+'width:'+imgWidth+'px'"></image><image src="../../static/dynamic_6.png" mode="scaleToFill" :style="'height:'+imgHeight+'px;'+'width:'+imgWidth+'px'"></image><image src="../../static/dynamic_7.png" mode="scaleToFill" :style="'height:'+imgHeight+'px;'+'width:'+imgWidth+'px'"></image><image src="../../static/dynamic_8.png" mode="scaleToFill" :style="'height:'+imgHeight+'px;'+'width:'+imgWidth+'px'"></image><image src="../../static/dynamic_9.png" mode="scaleToFill" :style="'height:'+imgHeight+'px;'+'width:'+imgWidth+'px'"></image></view></view></view>
</template><script>export default {data() {return {// 图片区域大小,根据图片数量动态变化imgClassHeight: 0,// 图片区域是否换行imgClassFlexWrap: '',// 图片宽度imgWidth: 400,// 图片高度imgHeight: 400,// 屏幕宽度大小screenWith: 0};},onLoad() {// 处理success中无法获取data中属性问题,success中this非vue实例let that = this// 获取屏幕宽度信息uni.getSystemInfo({success:function(res) {console.log("屏幕宽度:"+res.windowWidth); // 单位:pxthat.screenWith=res.windowWidth;console.log("screenWith:"+that.screenWith);}})// 模拟服务器获取的图片数量const imgSize=9;// 宽高比:1:1.2const WidthHeightRtio=1.2;//设置图片区域大小if(imgSize == 0){ // 无图片时图片区域大小,默认不显示this.imgClassHeight=5;  }if(imgSize == 1){ // 1张,一行展示this.imgClassHeight=240;// 宽高比:1:1.2this.imgWidth=200;this.imgHeight=240}if(imgSize >= 2 && imgSize <=3){ // 2-3张,一行展示this.imgWidth=(this.screenWith-20)/imgSize;// 按照页面实际显示保持宽高比console.log("图片个数:"+imgSize+",每张图大小:"+(this.imgWidth));this.imgHeight=this.imgWidth * WidthHeightRtiothis.imgClassHeight=this.imgHeight;}if(imgSize >= 4 && imgSize <=6){ // 4-6张两行// 左右padding为20rpx,所以屏幕宽度需要减去20px,1rpx=0.5pxthis.imgWidth=(this.screenWith-20)/3;  // 每张图片宽度console.log("图片个数:"+imgSize+",每张图	大小:"+(this.imgWidth));this.imgHeight=this.imgWidth*WidthHeightRtio;this.imgClassFlexWrap='wrap';this.imgClassHeight=this.imgHeight * 2;}if(imgSize >= 7 && imgSize <=9){ // 7-9张三行this.imgWidth=(this.screenWith-20)/3;  // 每张图片宽度this.imgHeight=this.imgWidth*WidthHeightRtio;this.imgClassFlexWrap='wrap';this.imgClassHeight=this.imgHeight * 3;}}}
</script><style lang="scss">
.user_class{padding-top: 10rpx;height: 60rpx;width: 100%;display: flex;justify-content: flex-start;align-items: center;padding-left: 20rpx;text{padding-left: 20rpx;}
}
.content{height: 150rpx;width: 100%;display: flex;justify-content: center;align-items: center;text{padding: 20rpx;}
}
.img_class{width: 100%;.img_content{display: flex;flex-direction:row;justify-content: flex-start;align-items: center;padding-left: 20rpx;padding-right: 20rpx;}}
</style>

     以上是处理多张图片动态改变图片大小的实现方案,看完希望对你有所帮助或启发,欢迎评论区留言交流或是点赞收藏!

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

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

相关文章

句子扩写软件-文案扩写软件

什么是扩写软件 扩写软件是一种工具&#xff0c;可以帮助用户对一段文本进行扩展&#xff0c;增加文本的长度和信息量&#xff0c;同时保持原始内容的基本意思和结构不变。简单来说&#xff0c;扩写软件就是通过自然语言处理技术&#xff0c;对原始文本进行修改或补充&#xf…

使用宝塔面板搭建个人网站(博客)超详细2023

文章目录 简介一、打开自己服务器控制面板二、安装宝塔 [宝塔地址](https://www.bt.cn/new/download.html)三、配置宝塔面板五、为你的网站导入模板总结 简介 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 一直有一个执念想搭一个自己的网站&#xff0c;今…

【宝塔】宝塔部署ThinkPHP项目

最近搞了个培训教育的小程序&#xff0c;后端服务用的是ThinkPHP。使用的过程中&#xff0c;发现对于这种小项目用php还是很不错的选择&#xff0c;开发便捷&#xff0c;轻量级。宝塔神器也是很不错的&#xff0c;值得推荐使用。 下面介绍一下项目中用宝塔部署ThinkPHP项目&…

宝塔面板搭建自己的网站,并发布公网远程访问

文章目录 1. 环境安装2. 安装cpolar内网穿透3. 内网穿透4.固定http地址5. 配置二级子域名6.创建一个测试页面 宝塔面板简单几步搭建本地web站点&#xff0c;并做内网穿透&#xff0c;实现公网用户也可以正常远程访问&#xff0c;无需公网IP&#xff0c;无需设置路由器。 1. 环…

什么是宝塔面板?宝塔面板安装和使用教程(详细)

宝塔简介 全面的操作 宝塔面板是一款服务器管理软件&#xff0c;支持windows和linux系统&#xff0c;可以通过Web端轻松管理服务器&#xff0c;提升运维效率。例如&#xff1a;创建管理网站、FTP、数据库&#xff0c;拥有可视化文件管理器&#xff0c;可视化软件管理器&#x…

宝塔面板部署青龙面板教程【简单易上手】

首先&#xff0c;你得有一台部署了宝塔面板的服务器&#xff08;自己用本地电脑也可以&#xff09;。 宝塔面板部署自行百度一下&#xff0c;很简单&#xff0c;这里就不走流程了&#xff0c;官网版本就可以&#xff0c;无需开心版。 首先&#xff0c;打开宝塔面板的软件商店&a…

手把手带用宝塔面板发布前端项目

全栈学习之路 噫吁嚱&#xff0c;全栈之难&#xff0c;难于上青天。万丈高楼平地起&#xff0c;学习还得靠自己&#xff0c;同志们&#xff0c;盘一盘今天让我们从一个服务器开始&#xff0c;发布我们的一个前端项目&#xff0c;他讲让你快速拥有一个自己的服务器和自己专属页…

通过宝塔面板部署个人博客

通过宝塔面板部署个人博客 准备工作 购买服务器、下载Xshell软件 部署步骤 步骤1、Xshell连接到服务器 首先打开自己购买的服务器的管理控制台页面&#xff0c;在控制台页面我们可以找到自己的服务器IP地址 打开Xshell文件&#xff0c;新建会话&#xff0c;点击确定进行…

宝塔面板搭建网站教程:Linux下使用宝塔一键搭建网站,内网穿透发布公网上线

文章目录 前言1. 环境安装2. 安装cpolar内网穿透3. 内网穿透4. 固定http地址5. 配置二级子域名6. 创建一个测试页面 转载自cpolar内网穿透的文章&#xff1a;使用宝塔面板快速搭建网站&#xff0c;并内网穿透实现公网远程访问 前言 宝塔面板作为简单好用的服务器运维管理面板&…

如何搭建一个属于自己的网站(使用宝塔面板)

1.购买域名与服务器 1.域名 简单的解释一下,我们购买的域名会给我们一个公网ip,通常这个公网ip是很难记.所以我们可以将域名与ip进行"绑定". 域名的话建议购买一个有意义,不要太贵的.注意次年续费的价格!! 阿里云 或者 腾讯云 下面这个是我的域名(和我名字差不多的意…

宝塔面板部署WordPress(保姆式教程)

前言&#xff1a; 通过本篇文章&#xff0c;您可以掌握&#xff1a; 1.基于宝塔面板的快速建站操作&#xff1b; 2.一些浅浅的建站知识与技能&#xff1b; 3.WordPress助您快速建站&#xff0c;节省您的时间&#xff1b; 如何联系我&#xff1f; wei.haoranoutlook.com …

宝塔面板+悟空CRM功能模块安装搭建部署教程 环境配置

悟空CRM目录结构 wk_modules ├── module – 无代码模块 ├── common – 基础模块 平台使用的主要技术栈 名称 版本 说明 spring-cloud-alibaba 2021.0.4 核心框架 spring-boot 2.6.11 spring版本 mybatis-plus 3.5.2 ORM框架 nacos 2.1.0 注册中心以及配置管理 seata 1.2.…

你的私人编程老师,ChatGPT帮你快速掌握Python编程

ChatGPT为我们提供了一种全新的学习方式&#xff0c;让你可以更轻松&#xff0c;更快速地学习编程知识。 以下是ChatGPT帮助用户学习编程的优势&#xff1a; 推荐资源和课程ChatGPT可以根据您的编程经验和学习目标&#xff0c;推荐适合您的在线学习资源和课程。例如&#xff0c…

微软 x OpenAI 祭出杀招!GPT-4 全面进入 Windows 11

作者 | 王启隆 责编 | 屠敏 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 二十余年前&#xff0c;微软曾发起过一场著名的“浏览器战争”&#xff0c;用 IE 4.0 成功打赢了浏览器市场份额超过 90% 以上的网景浏览器。当时&#xff0c;微软用的就是“将 IE 放在 …

全网最详细中英文ChatGPT-GPT-4示例文档-TL;DR文档快速总结应用从0到1快速入门——官网推荐的48种最佳应用场景(附python/node.js/curl命令源代码,小白也能学)

从0到1快速入门TL;DR文档快速总结应用场景 Introduce 简介setting 设置Prompt 提示Sample response 回复样本API request 接口请求python接口请求示例node.js接口请求示例curl命令示例json格式示例 其它资料下载 ChatGPT是目前最先进的AI聊天机器人&#xff0c;它能够理解图片和…

全新中文大模型多任务基准CMMLU:评估中文多任务语言理解能力

©PaperWeekly 原创 作者 | 李浩楠 单位 | MBZUAI 研究方向 | 自然语言处理 如何评估大模型&#xff08;LLM&#xff09;的语言能力和知识储备一直备受学术界和工业界的关注。本文介绍了 CMMLU&#xff0c;一个全面的中文大模型基准。它涵盖了 67 个主题&#xff0c;涉及自…

当 Kubernetes 遇到 GPT:利用编程模型的秘诀,让你省时省力!

❝ 本文转自 LEE 的博客&#xff0c;原文&#xff1a;https://juejin.cn/post/7215151665929912380&#xff0c;版权归原作者所有。欢迎投稿&#xff0c;投稿请添加微信好友&#xff1a;cloud-native-yang 事件背景 Hi Everybody!! 这次老李不讲技术了&#xff0c;而是讲“玄学…

01.LLaMA

文章目录 前言导读摘要 预备知识语言模型ChatGPT性能暴涨的原因&#xff08;涌现&#xff09;GPT-1Transformer 背景介绍模型精讲数据集及处理Common CrawlC4GithubWikipediaGutenberg and Books3ArXivStack Exchange小结 关键TrickPre-normalizationSwiGLURotary Embeddings 实…

必收藏!105页SD提示词手册;百度 Prompt 官方课程;7场 AIGC 免费线下活动;不懂代码的我,利用GPT做了一个微信小程序 | ShowMeAI日报

&#x1f440;日报&周刊合集 | &#x1f3a1;生产力工具与行业应用大全 | &#x1f9e1; 点赞关注评论拜托啦&#xff01; &#x1f916; 『Stable Diffusion Prompt Book』105页超详细&#xff0c;必收藏的AI绘画实用手册 ShowMeAI知识星球资料编号 R040 这是OpenArt 出品…

大型语言模(LLM)之提示词工程(四)

今天我学习了DeepLearning.AI的 Prompt Engineering 的在线课程&#xff0c;我想和大家一起分享一下该门课程的一些主要内容。以下是我写的关于该课程的前两篇博客&#xff1a; 大型语言模(LLM)之提示词工程(一)大型语言模(LLM)之提示词工程(二)大型语言模(LLM)之提示词工程(三…