解决页面等比缩放问题

news2024/12/25 12:43:38

        近些年可视化数据大屏技术早已成熟,在市场上相关技术也是五花八门;通常情况是自行开发,要不找技术比较成熟大厂定制,或者使用较成熟的低代码平台实现。

        技术门槛比较低,不过在数据大屏项目实施过程中会发现,需要调整屏幕分辨率,页面大小自适应,字体大小等问题;由于网页中最小字段12px,通过样式控制非常麻烦;此篇将使用CSS3新特性transform技术,来实现分辨率变化后,还可以正常显示页面。

        对transform技术不了解朋友,可以查看文档地址:CSS transform 属性

        由于近期工作较忙,这里将就简单写个页面来演示其效果,如下图:

         如上图,是在1920*1080分辨率下开发出来的页面,刚好是满屏展示。但是在具体实施中,由于大屏宽高不统一,或宽度过宽等问题,导致页面不能正常显示。如下图,将分辨率改为8000*3200,则内容显示非常小。

        

一、页面开发

1.1  Item页面

<template>
	<div class="list-item-box">
		<div class="item-title">
			<h3>{{title}}</h3>
		</div>
		<div class="item-content">
			<slot></slot>
		</div>
	</div>
</template>

<script>
export default {
  name: 'ItemBox',
	props: {
		title: {
			type: String,
			default: () => "标题"
		}
	}
}	
</script>

<style lang="scss" scoped>
@import "./index.scss";	
</style>

1.2 内容页面

<template>
	<div class="home-container">
		<div class="table-wrap">
			<div class="list-item">
				<ItemBox title="uni-app">
					<p>uni-app 是一个使用 Vue.js 开发所有前端应用的框架,开发者编写一套代码,可发布到iOS、Android、Web(响应式)、以及各种小程序(微信/支付宝/百度/头条/飞书/QQ/快手/钉钉/淘宝)、快应用等多个平台。</p>
					<p>DCloud公司拥有900万开发者、数百万应用、12亿手机端月活用户、数千款uni-app插件、70+微信/qq群。阿里小程序工具官方内置uni-app(详见),腾讯课堂官方为uni-app录制培训课程(详见),开发者可以放心选择。</p>
					<p>uni-app在手,做啥都不愁。即使不跨端,uni-app也是更好的小程序开发框架(详见)、更好的App跨平台框架、更方便的H5开发框架。不管领导安排什么样的项目,你都可以快速交付,不需要转换开发思维、不需要更改开发习惯。</p>
				</ItemBox>
			</div>
			<div class="list-item">
				<ItemBox title="小程序">
					<p>小程序是一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的梦想,用户扫一扫或者搜一下即可打开应用。也体现了“用完即走”的理念,用户不用关心是否安装太多应用的问题。应用将无处不在,随时可用,但又无需安装卸载。</p>
				</ItemBox>
			</div>
		</div>
		<div class="table-wrap">
			<div class="list-item">
				<ItemBox title="Java">
					<p>Java 是一个通用术语,用于表示 Java 软件及其组件,包括“Java 运行时环境 (JRE)”、“Java 虚拟机 (JVM)”以及“插件”。</p>
					<p>Java具有大部分编程语言所共有的一些特征,被特意设计用于互联网的分布式环境。Java具有类似于C++语言的形式和感觉,但它要比C++语言更易于使用,而且在编程时彻底采用了一种以对象为导向的方式。</p>
					<p>Java版本指的是 Java 系列和更新编号。示例:在网站上或者 Windows 程序中,版本显示为 Java 8 Update 25。旧版本也可显示为 1.7.0_65,这表示 Java 7 Update 65。</p>
				</ItemBox>
			</div>
			<div class="list-item">
				<ItemBox title="C#">
					<p>C# 是一个现代的、通用的、面向对象的编程语言,它是由微软(Microsoft)开发的,由 Ecma 和 ISO 核准认可的。</p>
					<p>C# 是由 Anders Hejlsberg 和他的团队在 .Net 框架开发期间开发的。</p>
					<p>C# 是专为公共语言基础结构(CLI)设计的。CLI 由可执行代码和运行时环境组成,允许在不同的计算机平台和体系结构上使用各种高级语言。</p>
				</ItemBox>
			</div>
		</div>
		<div class="table-wrap">
			<div class="list-item">
				<ItemBox title="PHP">
					<p>PHP(PHP: Hypertext Preprocessor)即“超文本预处理器”,是在服务器端执行的脚本语言,尤其适用于Web开发并可嵌入HTML中。PHP语法学习了C语言,吸纳Java和Perl多个语言的特色发展出自己的特色语法,并根据它们的长项持续改进提升自己,例如java的面向对象编程,该语言当初创建的主要目标是让开发人员快速编写出优质的web网站。 [1-2]PHP同时支持面向对象和面向过程的开发,使用上非常灵活。</p>
				</ItemBox>
			</div>
			<div class="list-item">
				<ItemBox title="NodeJs">
					<p>Node.js发布于2009年5月,由Ryan Dahl开发,是一个基于Chrome V8引擎的JavaScript运行环境,使用了一个事件驱动、非阻塞式I/O模型, [1] 让JavaScript 运行在服务端的开发平台,它让JavaScript成为与PHP、Python、Perl、Ruby等服务端语言平起平坐的脚本语言。</p>
					<p>Node.js对一些特殊用例进行优化,提供替代的API,使得V8在非浏览器环境下运行得更好,V8引擎执行Javascript的速度非常快,性能非常好,基于Chrome JavaScript运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。</p>
				</ItemBox>
			</div>
		</div>
	</div>
</template>

<script>
import ItemBox from '../ItemBox/index.vue'

export default {
  name: 'Home',
  components: {
		ItemBox
  }
}
</script>

<style lang="scss" scoped>
@import "./index.scss";	
</style>

        这里样式太基础,大家自行发挥吧。页面开发完成后,F12打开控制台,使用Responsive调整模拟长屏显示效果,则会发现页面不会跟随页面自适应,下面我们将讲解如何解决此问题。

二、等比缩放

        首先在home-container节点上添加style样式,并将在data中命名样式属性,代码如下:

<template>
	<div class="home-container" :style="ContainerStyle">
		<div class="table-wrap">
			<!-- ... 略 -->
		</div>
	</div>
</template>

<script>
import ItemBox from '../ItemBox/index.vue'

export default {
  name: 'Home',
  components: {
		ItemBox
  },
	data(){
		return {
			ContainerStyle: {
				position: "fixed",
				left: "50%",
				top: "50%",
				"transform-origin": "0 0",
				transform: "scaleX(2) scaleY(2) translate(-50%, -50%)"
			}
		}
	}
}
</script>

        此时页面样式如下图:

         如上图,页面内容已明显比之前大了一倍,那如果自动计算出放大倍数呢?这里则在页面加载时,公式为当前页面实际宽高 除此开发页面宽(1920px)和高(1080px),代码如下:

<script>
import ItemBox from '../ItemBox/index.vue'

export default {
  name: 'Home',
  components: {
		ItemBox
  },
	data(){
		return {
			ContainerStyle: {
				position: "fixed",
				left: "50%",
				top: "50%",
				"transform-origin": "0 0",
				transform: "scaleX(2) scaleY(2) translate(-50%, -50%)"
			}
		}
	},
	mounted() {
		this.initialPage();
	},
	methods: {
		initialPage(){
			const w = window.innerWidth / 1920;
			const h = window.innerHeight / 1080;
			this.ContainerStyle.transform = `scaleX(${w}) scaleY(${h}) translate(-50%, -50%)`;
		}
	}
}
</script>

         此时页面效果如下:

         但是现在页面看上去有点变形,失真效果。这是页面8000*3200和1920*1080不是等比原因;如果希望页面能够正常展示,可以以宽度的比例进行缩放,也可以通过高度比例。

        以下通过高度比例等比缩放,代码如下:

<script>
import ItemBox from '../ItemBox/index.vue'

export default {
  name: 'Home',
  components: {
		ItemBox
  },
	data(){
		return {
			ContainerStyle: {
				position: "fixed",
				left: "50%",
				top: "50%",
				"transform-origin": "0 0",
				transform: "scaleX(2) scaleY(2) translate(-50%, -50%)"
			},
			styleType: 3
		}
	},
	mounted() {
		this.initialPage();
	},
	methods: {
		initialPage(){
			const w = window.innerWidth / 1920;
			const h = window.innerHeight / 1080;
			
			switch(this.styleType){
				// 宽和高同时缩放
				case 1: this.ContainerStyle.transform = `scaleX(${w}) scaleY(${h}) translate(-50%, -50%)`; break;
				// 以宽度比例等比缩放
				case 2: this.ContainerStyle.transform = `scale(${w}) translate(-50%, -50%)`; break;
				// 以高度比例等比缩放
				case 3: this.ContainerStyle.transform = `scale(${h}) translate(-50%, -50%)`; break;
			}
			
		}
	}
}
</script>

 

        以高度比例进行缩放好处是,在宽度中内容可以一屏展示出来,但不足的是如果宽度不够,两边会留下许多空白区域,这可根据实现需求来进行处理。

        这里添加styleType变量,用于灵活调节不同展示效果。

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

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

相关文章

《移动互联网技术》第一章 概述: 掌握移动互联网的基本概念和组成

&#x1f337;&#x1f341; 博主 libin9iOak带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33…

密码找回安全总结-业务安全测试实操(28)

撞库攻击 撞库是黑客通过收集互联网已泄露的用户和密码信息,生成对应的字典表,尝试批量登录其他网站后,得到一系列可以登录的用户名和密码组合。由于很多用户在不同网站使用的是相同的账号和密码,因此黑客可以通过获取用户在 A 网站的账户从而尝试登录B网站,这就可以理解为…

Linux--时间相关的指令:date、cal

一、data显示 date 指定格式显示时间&#xff1a; date %Y:%m:%d date 用法&#xff1a; date [OPTION]... [FORMAT] 1.在显示方面&#xff0c;使用者可以设定欲显示的格式&#xff0c;格式设定为一个加号后接数个标记&#xff0c;其中常用的标记列表如下 %H : 小时(00..2…

threejs动画

个人博客地址: https://cxx001.gitee.io 前面我们所用的模型大都是静态的&#xff0c;没有动画&#xff0c;没有生命。这节我们将赋予它们生命。 动画本质是通过改变物体的旋转、缩放、位置、材质、顶点、面以及其它你所能想到的属性来实现的。这些其实在前面章节示例里或多或…

git 版本控制从入门到精通

文章目录 1、git安装1.1、Linux安装1.2、Windows安装1.3、MAC安装 2、配置git3、git命令使用4、git远程服务器5、提交到远端服务器6、commit合并7、创建分支8、命令练习记录 1、git安装 1.1、Linux安装 在linux上我们建议你用二进制的方式来安装git&#xff0c;可以使用发行版…

electron报错Error: Object has been destroyed

问题描述 在 Electron 中&#xff0c;当一个窗口被销毁后&#xff0c;与该窗口相关联的 JavaScript 对象也会被销毁&#xff0c;再次访问已被销毁的窗口对象时&#xff0c;会导致 Error: Object has been destroyed 错误。 例如之前在写多窗口pinia状态同步 / 多窗口样式同步的…

Redis【实战篇】---- 分布式锁

Redis【实战篇】---- 分布式锁 1. 基本原理和实现方式对比2. Redis分布式锁的实现核心思路3. 实现分布式锁版本一4. Redis分布式锁误删情况说明5. 解决Redis分布式锁误删问题6. 分布式锁的原子性问题7. Lua脚本解决多条命令原子性问题8. 利用Java代码调试Lua脚本改造分布式锁 1…

Python 利用深度学习识别空间推理验证码(一)

注意:本文会比较长,因为空间推理验证码本身比较复杂,我会详细的讲解,我是如何一步一步拆分空间推理的思想去实现的,另外,这里只介绍第一种思想来解决空间推理验证码,实际上,解决该验证码的方法也比较多,这第一种,我会讲解的比较简单,通俗易懂。 注意:下面数据集使用…

Redis主从/哨兵机制原理介绍

目录 ​编辑 一、主从复制 1.1 什么是主从复制 1.2 主从复制的作用 1.3 主从复制原理 1.3.1 全量复制 1.3.2 增量复制 1.3.3 同步流程 二、哨兵机制 2.1 哨兵机制介绍 2.1.1 集群逻辑图 2.1.2 哨兵机制实现的功能 2.2 哨兵机制原理 2.2.1 监控 2.2.2 下线 2.2.2.1 下线流程 2.…

C# csc构建dll 和 csc构建时指定dll

新建一个mydll.cs&#xff1b; using System; using System.Collections.Generic; using System.Linq; using System.Text;namespace myDLL {public class MyMath{public int add(int x, int y){return x y;}public int sub(int x, int y){return x - y;}} } 用下图命令构建…

MySQL高可用

MySQL高可用 一、高可用 1.什么是MHA MHA&#xff08;MasterHigh Availability&#xff09;是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。 MHA 的出现就是解决MySQL 单点的问题。 MySQL故障切换过程中&#xff0c;MHA能做到0-30秒内自动完成故障切换操作。 MHA能…

LeetCode·每日一题·2490. 回环句·模拟

作者&#xff1a;小迅 链接&#xff1a;https://leetcode.cn/problems/circular-sentence/solutions/2325227/mo-ni-zhu-shi-chao-ji-xiang-xi-by-xun-ge-x65e/ 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 著作权归作者所有。商业转载请联系作者获得授权&#xff0…

fusionpbx简介

概述 fusionpbx是以freeswitch作为底层框架开发而成的开源PBX&#xff0c;在freeswitch的基础上&#xff0c;优化了GUI的易用性。 fusionpbx可用作高可用性的单租户或基于域的多租户 PBX、运营商级交换机、呼叫中心服务器、传真服务器、voip服务器、语音邮件服务器、会议服务…

admin配置k8s

系列文章目录 文章目录 系列文章目录一、实验1.实验要求2.3. 所有节点安装docker4.所有节点安装kubeadm&#xff0c;kubelet和kubectl5.部署K8S集群6./所有节点部署网络插件flannel7./在master节点查看节点状态 总结 一、实验 1.实验要求 master&#xff08;2C/4G&#xff0c…

Maven的安装过程

参考地址 https://www.cnblogs.com/hanliukui/p/16842734.html 注意下载包体是bin的包体&#xff1a;Maven – Download Apache Maven 然后ok

echart 绘制一个基础的中国地图

echart&#xff0c;绘制一个基础的中国地图 代码示例 <template><div id"china_map_box"><div id"china_map"></div></div> </template><script> import * as echarts from echarts import chinaJson from ./…

《综合与Design_Compiler》学习笔记——第一章综合综述 第二章verilog语言结构到门级的映射 第三章 使用DC进行综合

文章目录 前言一、综合综述1、综合2、综合的不同层次&#xff08;1&#xff09;逻辑级综合&#xff08;2&#xff09;RTL级综合&#xff08;3&#xff09;行为级综合 二、verilog语言结构到门级的映射三、使用DC进行综合1、定义2、写时序约束3、写环境约束&#xff08;1&#x…

Vite创建vue3+ts+pinia项目流程

Vite 需要 Node.js 版本 14.18&#xff0c;16。然而&#xff0c;有些模板需要依赖更高的 Node 版本才能正常运行&#xff0c;当你的包管理器发出警告时&#xff0c;请注意升级你的 Node 版本(这里建议node版本在16以上)&#xff0c; 推荐使用 pnpm 包管理工具 管理项目 包安装…

Hive 之 beeline 客户端连接

beeline 客户端连接 Hive beeline -u jdbc:hive2://hadoop10:10000 -n hive 我们下期见&#xff0c;拜拜&#xff01;

【Verilog HDL】FPGA-testbench基础知识

&#x1f389;欢迎来到FPGA专栏~testbench基础知识 ☆* o(≧▽≦)o *☆嗨~我是小夏与酒&#x1f379; ✨博客主页&#xff1a;小夏与酒的博客 &#x1f388;该系列文章专栏&#xff1a;FPGA学习之旅 文章作者技术和水平有限&#xff0c;如果文中出现错误&#xff0c;希望大家能…