可视化大屏适配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 一行搞定自适应

目录
相关文章
|
前端开发 JavaScript UED
如何更好的去除谷歌浏览器中input自动填充背景?
如何更好的去除谷歌浏览器中input自动填充背景?
如何更好的去除谷歌浏览器中input自动填充背景?
|
前端开发 算法 API
直接在前端做 zip 压缩/解压
前段时间研究前端是如何解析 excel 表格的时候了解到 jszip 这个库,可以直接在前端对 zip 包进行压缩和解压缩,今天稍微水一篇。
|
编解码 数据可视化
基于transform的scale属性,实现数据可视化大屏自适应缩放,保持比例不变,轻松应对不同分辨率
基于transform的scale属性,实现数据可视化大屏自适应缩放,保持比例不变,轻松应对不同分辨率
1245 0
|
前端开发 UED 开发者
揭秘!前端大牛们如何巧妙利用动画效果,提升用户体验感!
前端开发中,动画不仅是美化网页的手段,更是提升用户体验的关键。本文介绍了三种常见的动画技术:渐进加载动画、过渡动画和SVG动画,分别用于提升页面响应速度、增强交互性和传递情感信息,帮助网页焕发新生。
379 4
|
数据可视化 Apache 索引
Vue3使用echarts仪表盘(gauge)
Apache ECharts 是一款强大的数据可视化库,其仪表盘图表(`gauge`)可用于展示度量数据。主要属性包括仪表盘数据源 `gaugeData`(必填)、容器宽度 `width`(默认 100%)及高度 `height`(默认 100%)。数据项需指定名称 `name` 和值 `value`,并支持额外属性。
1944 2
Vue3使用echarts仪表盘(gauge)
echarts如何设置滚动条(dataZoom),实现横向或纵向滚动
echarts如何设置滚动条(dataZoom),实现横向或纵向滚动
echarts如何设置滚动条(dataZoom),实现横向或纵向滚动
|
前端开发
大屏自适应/适配方案【详解】(echarts自适配、rem、flexible.js、vscode中px2rem插件自动计算rem)
大屏自适应/适配方案【详解】(echarts自适配、rem、flexible.js、vscode中px2rem插件自动计算rem)
1835 0
|
数据可视化 定位技术
【threejs】可视化大屏酷炫3D地图附源码
【threejs】可视化大屏酷炫3D地图附源码
11872 131
【threejs】可视化大屏酷炫3D地图附源码
|
JSON JavaScript 定位技术
Echarts 绘制地图(中国、省市、区县),保姆级教程!
Echarts 绘制地图(中国、省市、区县),保姆级教程!
|
存储 JavaScript 前端开发
在vue项目中实现单点登录
在vue项目中实现单点登录
1101 1