vue项目使用自适应布局投屏到物理拼接屏变形的处理

摘要:
凭借几次大屏幕体验,我们直接选择了vue+elementui来做这个项目。此外,为了进行调整,我们选择了vw和vh作为单位,而不是px。

这段时间,一直在做一个大屏项目,它的需求是:物理屏幕(LED拼接屏)的分辨率为:6720*2160,大屏页面需满足:通过屏幕分辨率为1920*1080的PC的浏览器访问IOC大屏,接HDMI线投屏后,物理大屏可被填满,显示分辨率为6720*2160,不会出现图像拉伸或压缩。

有了几个大屏经验的我们,直接就选择了vue+element ui 来做这个项目,另外,为了做自适应,我们选择了用vw,vh作为单位代替px。按照ui的蓝湖图,我写好的静态页面,在pc端上显示得非常完美,但是万万没想到在投屏时出现了严重得压缩和拉伸得问题。客户的电脑是1920*1080的分辨率, 大屏幕是拼接屏,不能直接当作一块显示屏,只能通过电脑复制投屏达到目的, 1920*1080,与6720*2160的屏幕差异是非常大的,所以文字出现拉伸变宽了,而环状图、饼图就出现了变扁被压缩的情况。

为了处理这个问题,我们去借鉴了dataV的框架做法,pc端略被纵向挤压,而复制投屏后就能够刚好正常拉伸显示。查看了一番后发现,对方做到了屏幕自适应,但使用的并不是rem,em或者vh,vw,而是直接使用了px作为单位,如下图:(1576px仅占用了1920px分辨率的四分之一左右!);

vue项目使用自适应布局投屏到物理拼接屏变形的处理第1张

 后来再看页面最大的盒子的特点,发现它除了直接写px为单位以外,还使用了transform:scale来放大缩小,以达到目的,如下图:

vue项目使用自适应布局投屏到物理拼接屏变形的处理第2张

 不断地拉伸屏幕,发现scale的两个横轴轴的数不断地改变,因此,我们要做的就是考虑如何得到这样跟着屏幕分辨率大小的变化而跟着变化的比率。

我的做法是这样的。。。。。。

首先, 用6720/2160,等到大概3.1的比值,那么我们获取屏幕高为1080px,假设高度不变,那么按照比例,此时宽应该为3348px,也就是1080*3.1, 

vue项目使用自适应布局投屏到物理拼接屏变形的处理第3张

 vue项目使用自适应布局投屏到物理拼接屏变形的处理第4张

如果宽度继续发生变化的话,那么为了让比例保持不变,那么就要进行比率的调整,将宽度进行缩放,于是我们有了下面这个函数

vue项目使用自适应布局投屏到物理拼接屏变形的处理第5张

 紧接着,监听屏幕高度的变化,重新调用上面的resizePage的方法,以此来改变scale中bi的比率,做完上面这一步会发现,这个时候比率会根据屏幕高度的变化而变化,但是当屏幕的宽度发生变化时却不会再变化了,

因为刚刚的设定就是假设高变化,宽进行transform:scale(xxx,1)的的配置;所以如果宽也发生变化,那也需要进行屏幕宽度变化的监听,计算出真实的宽与设定3.1倍的宽直接的scale比率,如下图:

vue项目使用自适应布局投屏到物理拼接屏变形的处理第6张

 做完这一步,就达到目的了,不管是只改变宽,还是只改变高,或是宽高同时变化都可以实现自适应。

免责声明:文章转载自《vue项目使用自适应布局投屏到物理拼接屏变形的处理》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Simscape Multibody 教程 —— 入门学习OpenSSH 命令注入漏洞(CVE202015778)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

VUE 使用中踩过的坑

vue如今可谓是一匹黑马,github star数已居第一位!前端开发对于vue的使用已经越来越多,它的优点就不做介绍了,本篇是我对vue使用过程中以及对一些社区朋友提问我的问题中做的一些总结,帮助大家踩坑。如果喜欢的话可以点波赞,或者关注一下,希望本文可以帮到大家! 1.路由变化页面数据不刷新问题 出现这种情况是因为依赖路由的params参数获取写在cr...

VUE内使用RSA加解密

说明:为防止私钥泄漏,由服务端生成两对密钥,分别是(前端公钥+私钥,后端公钥加私钥),采用加解密模式为:前端使用后台公钥加密,使用前端私钥解密;后端使用前端公钥加密,使用后端私钥解密。前后端统一使用公钥加密,私钥解密 一、现在vue项目中安装依赖包jsencrypt   npm install jsencrypt --save-dev 二、在项目中新建js...

antdvue 全局配置loading

1.在app.vue组件注入 //在template中写入 <div id="app"> <a-spin v-bind="loadingProps" > <router-view /> </a-spin> </div> /...

vue 中的 .sync 修饰符 与 this.$emit('update:key', value)

vue 中 .sync 修饰符,是 2.3.0+ 版本新增的功能 在有些情况下,我们可能需要对一个 prop 进行“双向绑定”。不幸的是,真正的双向绑定会带来维护上的问题,因为子组件可以变更父组件,且在父组件和子组件两侧都没有明显的变更来源。 这也是为什么我们推荐以update:myPropName的模式触发事件取而代之。举个例子,在一个包含titlepr...

vue组件之属性Props

组件的属性和事件 父子组件之间的通信 父子组件之间的通信就是 props down,events up,父组件通过 属性props向下传递数据给子组件,子组件通过 事件events 给父组件发送消息。比如,子组件需要某个数据,就在内部定义一个prop属性,然后父组件就像给html元素指定特性值一样,把自己的data属性传递给子组件的这个属性。而当子组件内部...

Linux安装最新版Vue或者指定版本

ubuntu安装最新版Vue或者指定版本 首先已经安装了node.js 使用命令查看 $: node -v v10.17.0 再使用如下命令: npm install -g @vue/cli 安装后查看: $: vue -V @vue/cli 4.3.1 安装制定版本: #这个命令是百度的具体没有用过 npm install -g @vue/cli...