可视化大屏适配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月前
|
数据可视化 搜索推荐 vr&ar
全景可视化特点+可视化功能实现
全景可视化特点+可视化功能实现
23 2
|
29天前
|
编解码 数据可视化
基于transform的scale属性,实现数据可视化大屏自适应缩放,保持比例不变,轻松应对不同分辨率
基于transform的scale属性,实现数据可视化大屏自适应缩放,保持比例不变,轻松应对不同分辨率
66 0
|
5月前
|
存储 缓存 数据可视化
如何在 G6VP 可视化平台使用 GraphScope 引擎
如何在 G6VP 可视化平台使用 GraphScope 引擎
208 0
如何在 G6VP 可视化平台使用 GraphScope 引擎
|
数据可视化 前端开发 JavaScript
数据大屏的简单适配
数据大屏的简单适配
358 1
|
缓存 监控 数据可视化
DataV 如何做适配
DataV 如何做适配
245 0
|
容器
布局:大屏方案(grid)
布局:大屏方案(grid)
109 1
|
存储 JSON 数据可视化
ChatGPT工作提效之数据可视化大屏组件Echarts的实战方案(大数据量加载、伪3D饼图、地图各省cp中心坐标属性、map3D材质)
ChatGPT工作提效之数据可视化大屏组件Echarts的实战方案(大数据量加载、伪3D饼图、地图各省cp中心坐标属性、map3D材质)
640 0
|
编解码 数据可视化 前端开发
漏刻有时数据可视化屏幕分辨率自适应PC端的概念
漏刻有时数据可视化屏幕分辨率自适应PC端的概念
83 0
|
JavaScript 前端开发 BI
关于大屏适配我所知道的
关于大屏适配我所知道的
186 0
|
JavaScript 前端开发 异构计算
大屏适配方案汇总
大屏适配方案汇总
大屏适配方案汇总