大屏数据可视化,常见的,在一些博览会、交通地图、互联网服务动态监控、售楼部里等等,通常会有一个大屏信息展示,各种信息动态感知。
要做这样一个大屏页面,首先要解决屏幕适配问题,
19201080(43)= 7680 3240

设计稿设计应按大屏尺寸设计,要想在本地开发的时候写出一个76803240的页面非常的不现实,常用的屏幕也就是19201080,1440900等等
所以需要解决适配问题
方案一:js获取视口宽高,计算比例,等比例缩放

html,body宽高100%,挂载节点app高度100vh主页面宽高设置成设计稿的宽高,也就是7680*3240window.addEventListener('resize', () => {clearTimeout(this.timeout);this.timeout = setTimeout(() => {this.setScale();}, 400);});setScale(){const { width = 1920, height = 1080 } = ENV.screens || {};const root = document.querySelector('#app');const perW = root.clientWidth / width;const perH = root.clientHeight / height;const getScale = () => {if (ENV.screens.mode === 'full') {// 全屏模式return 'scale(' + perW + ',' + perH + ')';}// 按宽度等比例缩放return 'scale(' + perW + ')';}const style = {width: width + 'px',height: height + 'px',transformOrigin: 'left top',transform: this.getScale()}for (let k in style) {document.querySelector('#app').style[k] = style[k];}}
方案二:基于rem的自适应方法
首先计算缩放比,根据屏幕大小动态设置根元素html的fontSize值。
总结
- 基于transform缩放的方案,优点是按设计稿设置元素大小,无需转换长度单位。缺点是放大展示时,echarts等图表会出现失真现象。为了避免图表失真,设计稿设计应按大屏尺寸设计,使其在屏幕中缩小展示。
- 基于rem的缩放方案,元素长度单位需转换为rem。放大展示时,不会出现图表失真的情况。当缩小至根元素fontsize<12px时,由于浏览器展示的最小字号是12px,文字不能被再缩小,会出现比例不协调的情况。解决办法是,设置画布的最小宽度和最小高度,当屏幕小于最小宽度和最小高度时增加滚动条,使画布不再被缩小。
