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.pswp.cn/news/255989.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/255989.shtml
英文地址,請注明出處:http://en.pswp.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…