一段代码解决前端大屏项目适配的问题

6 篇文章 0 订阅
1 篇文章 0 订阅

适配方案

该方案是基于css中的缩放(transform: scale(xxx))的方法来适配不同分辨率下的页面

实现思路

获取当前页面可视化区域的宽高,对比设计稿的宽高,获得一个缩放比例(宽度比 = 当前可视化区域的宽度 / 设计稿的宽度,高度比 = 当前可视化区域的高度 / 设计稿的高度)

如果宽度比小于高度比,则x轴铺满,y轴出现白边(白边可用背景色去进行填充)
在这里插入图片描述
如果高度比小于宽度比,则y轴铺满,x轴出现白边
在这里插入图片描述
如果宽高比相同,则宽高同时铺满视口
在这里插入图片描述

核心代码

		initPpage()

		window.onresize = () => {
			initPpage()
		}
		function initPpage() {
			let $body = document.body;
			let scale = 1; //缩放比例
			let d_width = 1920; //设计图宽度
			let d_height = 1080;//设计图高度
			let c_width = window.innerWidth; //当前视图宽度
			let c_height = window.innerHeight;//当前视图高度
			if (c_width / d_width < c_height / d_height) {
				scale = c_width / d_width
			} else {
				scale = c_height / d_height
			}
			$body.style.width = d_width + 'px';
			$body.style.height = d_height + 'px';
			$body.style.transform = `scale(${scale}) translate(-50%,-50%)`
		}

demo

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style>
			* {
				padding: 0;
				margin: 0;
			}

			body {
				position: absolute;
				top: 50%;
				left: 50%;
				transform-origin: left top;
				overflow: hidden;
				transition: all 0.3s;
			}

			.top-page {
				background-color: yellowgreen;
				width: 100%;
				height: 540px;
				font-size: 40px;
			}

			.bottom-page {
				background-color: cornsilk;
				width: 100%;
				height: 540px;
				display: flex;
				align-items: flex-end;
				font-size: 40px;
			}
		
		</style>
	</head>
	<body id='body'>
		<div class='top-page'>top</div>
		<div class='bottom-page'>bottom</div>

	</body>

	<script>
		initPpage()

		window.onresize = () => {
			initPpage()
		}
		function initPpage() {
			let $body = document.body;
			let scale = 1; //缩放比例
			let d_width = 1920; //设计图宽度
			let d_height = 1080;//设计图高度
			let c_width = window.innerWidth; //当前视图宽度
			let c_height = window.innerHeight;//当前视图高度
			if (c_width / d_width < c_height / d_height) {
				scale = c_width / d_width
			} else {
				scale = c_height / d_height
			}
			$body.style.width = d_width + 'px';
			$body.style.height = d_height + 'px';
			$body.style.transform = `scale(${scale}) translate(-50%,-50%)`
		}
		
	</script>
</html>

可能遇到的问题

1.页面出现白边

页面出现白边的情况是正常的,因为要保持页面元素的宽高比,防止页面元素出现失真、变形的问题
举个例子
在a分辨率的屏幕上(1920 * 1080),页面上绘制了一个a元素
在1920 * 1080的分辨率下,a元素显示的是一个正方形
在这里插入图片描述
当把页面放到b分辨率的屏幕(1920 * 540)上的时候,页面宽度不变,高度降低了一半,就会出现失真的状况,a元素从正方形变成了长方形

在这里插入图片描述
为了防止元素出现失真的状况,需要将宽度连同高度一起缩放
在这里插入图片描述

2.一些第三放ui框架(elementUI等)下拉框的弹层可能会出现跑偏的问题

问题出现的原因:使用了transform之后,视觉上元素的大小发生了改变,但是在现实中,页面元素的宽高还是没缩放之前的样子,只是视觉上发生了变化(可以去官网看一下css中transform的底层原理)
该方案无法对第三方ui库进行适配,建议不要使用第三方ui库,如果已经使用了,则需要手动去调整elementUI的源码或式样,

以下拉框举例,默认情况下,下拉款的弹层是插入到body里的,只要将下拉框的popper-append-to-body属性设置为false,让其插入到下拉框节点内部就可以避免定位跑偏的问题了

  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雾里桃花

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值