Vue3、TypeScript 实现图片数量及大小随宽度自适应调整

前言

过了这么久,想起自己还有个博客,更点内容吧!

来,上需求!

最近在做个前端界面,要求在一行中展示一些图片,展示的图片数量随着窗口宽度大小进行变化,除此之外还有以下要求:

  • 图片要均匀分布;
  • 所有图片要完整的填充一整行;
  • 图片的大小随着窗口宽度变化自适应调整。

不说了,不说了,上个最终实现效果图。

dynamic_show_iamge_in_vue3.gif

实现

基本思路

最开始是打算主要依靠 CSS 的布局来实现,几乎把自己了解的布局方式都想了一遍了,最后默默的给自己找了个借口:刚开始学,不要为难自己!不要为难自己!

motion_1.jpg

最终思路:

  1. 每张图片设定一个最小宽度;
  2. 当JS监测到窗口宽度变化后获取窗口宽度;
  3. 计算在当前窗口宽度,使用最小宽度图片的情况下一行中可以容纳的最多图片数量;
  4. 计算出一行中剩余的空间,然后平均分配给所有图片,得到最终的图片宽度;
  5. 最后通过 CSS 调整图片大小。

代码实现

测试环境:vite + vue3 + ts + sass

<!--* @Author       : KK* @Date         : 2022-02-19 12:30:41* @LastEditTime : 2022-02-19 13:58:02
--><script setup lang="ts">
import { reactive, onMounted, onUnmounted } from 'vue'
// 计算中心 content 的可视宽度 viewpoint-width,content 占据一行的85%宽度
const vw = () => document.body.clientWidth * 0.85; 
const minBoxCnt = 3; // 最少可显示的盒子数量
const maxBoxCnt = 8; // 最多可显示的盒子数量
const boxInfo = reactive({w: 160, // 盒子的宽度mw: 160,  // 盒子的最小宽度ratio: 1.45,// 高宽比gap: 20, // 盒子间的 gap 大小cnt: 3,  // 可显示的盒子数量
})// 计算中心区域可以容纳的盒子数量并设定盒子的宽度
const cal_box_cnt = () => {let c = Math.floor(vw() / boxInfo.mw);c = Math.min(c, maxBoxCnt);const cal_lave_space = (c: number) => {return vw() - boxInfo.mw * c - boxInfo.gap * (c - 1);}let lave_space = 0;let width = 0;if ((lave_space = cal_lave_space(c)) > 0) {width = boxInfo.mw + lave_space / c;} else {c--;width = boxInfo.mw + cal_lave_space(c) / c;}// console.log(lave_space, c, vw());boxInfo.w = width;if (c < minBoxCnt) {boxInfo.w = boxInfo.mw;}// console.log(boxInfo.w);return Math.max(c, minBoxCnt);
}boxInfo.cnt = cal_box_cnt()
onMounted(() => window.onresize = () => boxInfo.cnt = cal_box_cnt());
onUnmounted(() => window.onresize = null);
</script><template><div class="outer"><div class="inner" v-for="item in boxInfo.cnt"><img src="./assets/bg.jpg" alt="background" /></div></div>
</template><style lang="scss">
body {background-color: darkcyan;
}
#app {width: 85%;min-width: 520px; // 160 * 3 + 2 * 20margin: 100px auto;background-color: #fff;
}.outer {display: flex;flex-wrap: nowrap;transition: all 0.5s;.inner {img {width: 100%;height: 100%;}}.inner:nth-child(n) {width: v-bind('boxInfo.w + "px"');height: v-bind('boxInfo.w * boxInfo.ratio + "px"');margin-right: v-bind('boxInfo.gap + "px"');}.inner:last-child {margin-right: 0;}
}
</style>

本文章转自:https://blog.nas-kk.top/?p=449

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

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

相关文章

【tensorFlow】——图像数据增强、读取图像、保存图像

#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2021/4/13 10:54 # @Author : @linlianqin # @Site : # @File : 数据增强(distorted).py # @Software: PyCharm # @description:一些基于TensorFlow的数据处理方法import tensorflow as tf import cv2 im…

数据分析方法有哪些_数据分析方法

数据分析方法有哪些_数据分析方法 随着大数据的到来&#xff0c;数据分析师成为大数据时代一颗冉冉升起的新星&#xff0c;现在企业越来越重视大数据&#xff0c;数据分析师这个职业也成为企业争抢的对象。那么数据分析师的分析数据的方法都有哪些呢&#xff1f; 1、数据分析遵…

苹果Iphone/Ipad--L2T虚拟教程

1 Iphone和Ipad同为IOS&#xff0c;设置方法相同。首先进入IOS系统的“设置”程序。 2 点击“通用”进入通用设置&#xff0c;点击“”; 3 选择"添加设置 "&#xff1b; 4 选择L2TP方式&#xff0c;填写必要信息&#xff1a;描述、服务器地址 、您注册充值的账号及密…

记忆化搜索的应用

记忆化搜索的应用 一般来说&#xff0c;动态规划总要遍历所有的状态&#xff0c;而搜索可以排除一些无效状态。更重要的是搜索还可以剪枝&#xff0c;可能剪去大量不必要的状态&#xff0c;因此在空间开销上往往比动态规划要低很多。 如何协调好动态规划的高效率与高消费之间的…

【深度学习】——DNN后向传播、CNN后向传播文章汇总

深度神经网络&#xff08;DNN&#xff09;模型与前向传播算法 深度神经网络&#xff08;DNN&#xff09;反向传播算法(BP) 卷积神经网络CNN的前向和后向传播&#xff08;一&#xff09; 卷积神经网络CNN的前向和后向传播&#xff08;二&#xff09; 有batch normalization的卷积…

ajaxReturn 之前dump调试,导致$.ajax不能正常运行

ajaxReturn 之前dump调试&#xff0c;导致$.ajax不能正常运行 以后调试的时候&#xff0c;注意下这个情况转载于:https://www.cnblogs.com/bushe/p/5180317.html

Veebot-自动静脉抽血机器人

Veebot-自动静脉抽血机器人 我们可能都有过被抽血的经验。护士让你握紧拳头&#xff0c;用一根橡皮条压住你上臂的血管&#xff0c;在你的肘部内侧寻找你的静脉&#xff0c;有时还需要拍打几下&#xff0c;摸到隆起的静脉血管&#xff0c;一针下去。有时候碰到技术好的护士&…

idea 转普通项目为maven 项目

1、项目上右键 Add Framework Support。 2、选择maven&#xff0c;点击OK。 转载于:https://www.cnblogs.com/mayanze/p/8042489.html

HDOJ5547 SudoKu

题目链接&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid5547 题目大意&#xff1a;填数独。。。 思路&#xff1a;爆搜 1 #include <stdio.h>2 #include <string.h>3 #include <iostream>4 #include <algorithm>5 using namespace std;6 boo…

【深度学习之ResNet】——深度残差网络—ResNet总结

目录 论文名称&#xff1a;Deep Residual Learning for Image Recognition 摘要&#xff1a; 1、引言 2、为什么会提出ResNet残差网络呢&#xff1f; 3、深度残差网络结构学习&#xff08;Deep Residual learning&#xff09; &#xff08;1&#xff09;残差单元 &#xf…

Atitit.  c# 语法新特性 c#2.0 3.0 4.0 4.5 5.0 6.0   attilax总结

Atitit. c# 语法新特性 c#2.0 3.0 4.0 4.5 5.0 6.0 attilax总结 1.1. C# 1.0-纯粹的面向对象 1.2. C# 2.0-泛型编程新概念 1.3. C# 2.0的另一个突出的特性就是匿名方法 1.4. C#3.0 linq 1.5. C# 4.0动态编程 dynamic 1.6. C# 4.5 异步编程 async和await 1.7. C# 5.0 更方便…

关于SafeMove White Paper功能

ABB机器人网站有一个 Safemove 功能的介绍&#xff0c;在Overview页面右半版有一篇文档是 SafeMove White Paper &#xff0c;在45页的 pdf 文档中&#xff0c;详细了介绍工业机器人的安全原则&#xff0c;以及ABB工业机器人自身 EPS (Electronic Position Switches) 和 SafeMo…

面试疑难点解析

List,Set,Map,有什么区别&#xff1f; List和Set实际上市实现了Collection接口&#xff0c;那么Collection接口的原理你能简单描述一下吗&#xff1f; List接口可以插入多个NULL值&#xff0c;并且重复值&#xff0c;而且LIST是一个有序的集合。 Set是一个不可重复的集合&#…

【深度学习】——日常知识点总结(持续更新)

设计卷积网络的原则&#xff1a; 1、最后转为一维有两种方式&#xff1a;1&#xff09;全局平均池化&#xff1b;2&#xff09;扁平化直接转化为一维的 2、在卷积层的大小变化时尽量保证特征图大小减小n倍时&#xff0c;特征图的个数也增加n倍&#xff0c;维持网络的复杂度&a…

主机无法访问虚拟机的httpd服务

症状&#xff1a;虚拟机装的centos6.3 通过桥接的方式与主机连接 虚拟机通过yum安装httpd服务 在主机浏览器中输入 虚拟机ip 无法访问虚拟机Apache 虚拟机和主机可以相互ping通 解决&#xff1a;关掉虚拟机的防火墙就可以了 命令setup进入防火墙管理 按空格键取消防火墙启用 转…

越狱Season 1- Episode 22: Flight

Season 1, Episode 22: Flight -Franklin: You know you got a couple of foxes in your henhouse, right? fox: 狐狸 henhouse: 鸡舍 你的队伍里都是一群狐狸 -Michael: They both want out of here. both: 两者都 他们都想出去 Theyll behave until then. behave: 举止端…

巴科斯范式BNF: Backus-Naur Form介绍

巴科斯范式(BNF: Backus-Naur Form. 的缩写)是由 John Backus 和 Peter Naur 首次引入一种形式化符号来描述给定语言的语法&#xff08;最早用于描述ALGOL 60 编程语言&#xff09;。 现在&#xff0c;几乎每一位新编程语言书籍的作者都使用巴科斯范式来定义编程语言的语法规则…

2017-2018-1 20155229 《信息安全系统设计基础》第十三周学习总结

2017-2018-1 20155229 《信息安全系统设计基础》第十三周学习总结 对“第二章 信息的表示和处理”的深入学习 这周的任务是选一章认为最重要的进行学习&#xff0c;我选择了第二章。当今的计算机存储和处理信息基本上是由二进制&#xff08;位&#xff09;组成&#xff0c;二进…

【VOC格式xml文件解析】——Python

#!/usr/bin/env python # -*- coding: utf-8 -*- # Time : 2021/4/26 12:49 # Author : linlianqin # Site : # File : test1.py # Software: PyCharm # description: import xml.etree.ElementTree as ETdef xmli(xmlpath):xmlTree ET.parse(xmlpath) # 解析xml文…

C—的BNF语法

近期用到ABB机器人&#xff0c;RAPID使用BNF语法规则描述&#xff0c;所以不得不复习了一下BNF语法描述规则&#xff0c;通过C的BNF描述&#xff0c;唤醒我的记忆 %>_<% C—的BNF语法如下&#xff1a; 1. program → declaration-list 2. declaration-list → decla…