图片居中自适应铺满盒子

今天做了个小功能,需要实现图片居中铺满屏幕,并且不能有留白更不能被压瘪,如下图:
在这里插入图片描述
直接网上搜索铺满屏幕,大部分都是宽度直接100%,因为这里需要实现图片居中并且同时要铺满屏幕,并且肯定不能被压瘪,所以直接宽度,高度100%肯定不行的,所以我这里选择使用css的scale属性来实现。
原理就是首先图片width=‘100%’,然后判断图片的高度是否小于父元素的高度,因为我这里不是瀑布流,所以父元素肯定是定死,然后图片自适应的,当小于父元素高度时就将scale加个0.1左右,然后不断循环判断,直到图片高度大于父元素高度,当然前提肯定先将图片垂直居中,这样放大以后才能居中铺满整个屏幕并且不被压缩。
好了,给下源码:

dom元素:

<span class="photo-parent"><img :src="" class="photo-img" ></span>

css样式:

.photo-parent{
	width:100px,
	height:150px ;
	position: relative;
}

.photo-img {
	width: 100%;
	position: absolute;
	top: 0;
	bottom: 0;
	margin: auto;
}

js封装:

scaleMain(imglistClass, imglistParentClass) {
				setTimeout(() => {
					let photoArry = []
					let timeStart = setInterval(() => {
						let photoImg = document.getElementsByClassName(imglistClass);
						let photoParentHeight = document.getElementsByClassName(imglistParentClass)[0].offsetHeight;
						let timeEnd = 0;
						for (let i = 0; i < photoImg.length; i++) {

							if (photoArry[i] == undefined) {
								photoArry[i] = {};
								photoArry[i].num = 0.1;
							}
							if ((photoImg[i].offsetHeight * (photoArry[i].num + 1)) < photoParentHeight) {
								photoArry[i].num = photoArry[i].num + 0.1 + 1
								photoImg[i].style.transform = 'scale(' + photoArry[i].num + ')'
								timeEnd = 1;
							}
							if (i == photoImg.length - 1) {
								if (timeEnd !== 1) {
									clearInterval(timeStart)
								}
							}

						}

					})
				}, 1000)
			}

使用方法:this.scaleMain(‘photo-img’, ‘photo-parent’);
因为我这里使用的vue脚手架,所以函数这样的引用和定义的,如果没有使用框架的,可以自行修改,函数里面也比较简单,imglistClass是img的class,主要用来获取有多少个img,而imglistParentClass则是上边span的class,主要用来获取下父元素的高度,因为我实际用的是rem(这里为了展示,所以改成了px)所以你如果确定span的高度可以直接在函数里改下就可以。
当然,以上也是实在找不到有什么好的实现方式,自行拟定的一个方式,如果有大神有更好的方式或者简便的插件,可以评论推荐。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值