可视化大屏适配scale方案

简介: 本文介绍了一种使用CSS实现可视化大屏适配的方案。通过设置容器的`transform: scale()`属性,根据屏幕大小动态调整大屏内容的缩放比例,从而实现不同分辨率下的适配。文章提供了详细的实现方法,包括Vue组件的模板、逻辑和样式代码,并展示了实际效果的对比图。此外,还推荐了一个npm包`autofit.js`,用于简化大屏适配的实现。

可视化大屏适配scale方案

正常大小100%:
在这里插入图片描述

缩小到30%的视图:
在这里插入图片描述

使用css来实现页面的方法缩小:

view层:

  <div
    class="AllEchartsBox"
    ref="AllEchartsBox"
    :style="{
   
      width: width + 'px',
      height:height + 'px'
    }"
  >
    <div class="boxChild">
      <v-top></v-top>
      <div class="echartsBody">
        <el-row :gutter="10">
          <!-- 左侧 -->
          <el-col :span="6" class="el-colleft">
            <v-left class="left"></v-left>
          </el-col>
          <!-- 右侧 -->
          <el-col :span="18">
            <v-right class="right"></v-right>
          </el-col>
        </el-row>
      </div>
    </div>
  </div>
</template>

逻辑层:

<script>
import vTop from "./children/Top";
import vLeft from "./children/Left";
import vRight from "./children/Right";
export default {
   
  name: "AllEcharts",
  components: {
   
    vTop,
    vLeft,
    vRight
  },
  data() {
   
    return {
   
      scale: 1,
      width: 1920,
      height: 1080
      // 头部的高
      // topHeight: 70
    };
  },
  methods: {
   
    getScale() {
   
      const {
    width, height } = this;
      let ww = window.innerWidth / width;
      // let wh = (window.innerHeight - this.topHeight) / height;
      let wh = window.innerHeight / height;
      return `${
     ww},${
     wh}`;
      // 不是 16 : 9的情况下
      // if ((window.innerHeight-this.topHeight) < height) {
   
      //   return `${ww},${wh}`;
      // }
      // return ww < wh ? wh : ww;
    },
    setScale() {
   
      this.scale = this.getScale();
      if (this.$refs.AllEchartsBox) {
   
        this.$refs.AllEchartsBox.style.setProperty("--scale", this.scale);
      }
    },
    debounce(fn, delay) {
   
      const delays = delay || 200;
      let timer;
      return function() {
   
        const th = this;
        const args = arguments;
        if (timer) {
   
          clearTimeout(timer);
        }
        timer = setTimeout(function() {
   
          timer = null;
          fn.apply(th, args);
        }, delays);
      };
    }
  },
  mounted() {
   
    this.setScale();
    window.addEventListener("resize", this.setScale);
    // 防抖
    // window.addEventListener("resize", this.debounce(this.setScale));
  }
};
</script>

css层:

<style lang="less" scoped>
.AllEchartsBox {
   
  position: relative;
  height: 1080px;
  width: 1920px;
  .boxChild {
   
    width: 100%;
    height: 100%;
    position: absolute;
    transform-origin: left top 0px;
    transform: scale(var(--scale));
    transition: 0s;
    z-index: 999;
  }
  .echartsBody {
   
    // 减去99 ==  79头部高 + 上下 20 px的间隙
    height: calc(1080px - 99px);
    padding-bottom: 10px;
    margin: 10px 20px;
    .el-row {
   
      height: 100%;
      .el-colleft {
   
        padding-left: 0px !important;
      }
      .el-col {
   
        height: 100%;
        .left {
   
          background-image: url("../../assets/img/AllEcharts/leftBoxBorder.png");
          background-repeat: no-repeat;
          background-size: 100% 100%;
          height: calc(1080px - 99px);
        }
        .right {
   
          height: calc(1080px - 99px);
        }
      }
    }
  }
}
</style>

20230615补充一个博主的npm包,原理和上面介绍的一致:
可视化大屏:autofit.js 一行搞定自适应

目录
相关文章
|
1月前
|
前端开发 小程序
移动端适配方案
【8月更文挑战第1天】
|
11月前
|
数据可视化 前端开发 JavaScript
数据大屏的简单适配
数据大屏的简单适配
340 1
|
10月前
|
缓存 监控 数据可视化
DataV 如何做适配
DataV 如何做适配
226 0
|
数据可视化 前端开发 CDN
漏刻有时数据可视化大屏常见问题(16):视频背景快速加载及展示的解决方案
漏刻有时数据可视化大屏常见问题(16):视频背景快速加载及展示的解决方案
72 0
|
编解码 数据可视化 前端开发
漏刻有时数据可视化屏幕分辨率自适应PC端的概念
漏刻有时数据可视化屏幕分辨率自适应PC端的概念
76 0
|
JavaScript 前端开发 BI
关于大屏适配我所知道的
关于大屏适配我所知道的
167 0
|
Web App开发 小程序 算法
大屏小程序探索实践 | Cube 技术解读
大屏小程序探索实践 | Cube 技术解读
220 0
|
JavaScript 前端开发 异构计算
大屏适配方案汇总
大屏适配方案汇总
大屏适配方案汇总
|
数据可视化 前端开发
前端可视化大屏适配方案
前端可视化大屏适配方案
前端可视化大屏适配方案
|
数据可视化 安全 图形学
实时云渲染技术应用之三维可视化部署
实时云渲染技术是以上两个方案的升级方案,该方案是纯B/S架构,将三维可视化、UE\Unity模型放置在服务器上,通过云渲染软件系统流化出可以在手机、电脑、平板、智慧屏等设备上可以直接访问的URL地址。程序运行是在云端服务器上,本地设备无需提供任何算力,用户也不需安装任何插件,而且在网络OK的情况下在任何设备任何地点(办公室、家里等)都可随时打开。在模型建设的阶段也可以选择多种引擎,无论是精美度更高的UE5还是unity、3dmax 或者其他设计软件都是OK的。因为云流化的原理其实不改变程序的指令执行过程,而是把整个执行过程画面以视频流的方式传回给用户终端设备。
424 0
实时云渲染技术应用之三维可视化部署