可视化大屏适配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 API
vue插槽slot、slot-scope、v-slot的区别以及嵌套插槽的使用
可以将 slot 理解成一个占位的东西,我们提前在模板中放置一个占位的标记,当其他地方要使用模板时就可以通过标记再传进来具体的内容,这样就可以实现更强的复用能力。
|
JavaScript
一招教你实现自适应浏览器大小的Echarts饼状图
一招教你实现自适应浏览器大小的Echarts饼状图
1336 0
|
JSON JavaScript 定位技术
Echarts 绘制地图(中国、省市、区县),保姆级教程!
Echarts 绘制地图(中国、省市、区县),保姆级教程!
29727 154
|
编解码 数据可视化
基于transform的scale属性,实现数据可视化大屏自适应缩放,保持比例不变,轻松应对不同分辨率
基于transform的scale属性,实现数据可视化大屏自适应缩放,保持比例不变,轻松应对不同分辨率
1756 0
|
JavaScript
如何在Vue页面中引入img下的图片作为背景图。../的使用
这篇文章介绍了在Vue页面中如何引入`img`目录下的图片作为背景图,提供了两种使用相对路径的方法。第一种是使用`../assets/img/`作为路径引入图片,第二种是使用`../../assets/img/`作为路径。文章还展示了使用这些方法的代码实现和效果展示,并鼓励读者学无止境。
如何在Vue页面中引入img下的图片作为背景图。../的使用
|
移动开发 Dart 前端开发
用 Vue.js 构建一个高性能 Flutter 应用
染陌给大家带来一个用 Vue.js 开发 Flutter 应用的方案,以及 Kraken 背后的实践与思考。
用 Vue.js 构建一个高性能 Flutter 应用
|
移动开发 小程序 数据可视化
基于npm CLI脚手架的uniapp项目创建、运行与打包全攻略(微信小程序、H5、APP全覆盖)
基于npm CLI脚手架的uniapp项目创建、运行与打包全攻略(微信小程序、H5、APP全覆盖)
5678 3
|
JSON JavaScript 定位技术
Vue结合ECharts绘制省市地图:数据驱动区域颜色展示,支持省市下钻与经纬度打点功能
Vue结合ECharts绘制省市地图:数据驱动区域颜色展示,支持省市下钻与经纬度打点功能
3695 1
|
JavaScript 前端开发 搜索推荐
ECharts词云图(案例一)+配置项详解
ECharts,百度的JavaScript图表库,支持词云图(自5.0版起),借助`echarts-wordcloud`插件。配置词云图涉及`tooltip`(如显示、颜色、边框等)和`series`(类型、形状、大小范围等)。示例代码展示了如何在HTML中引入依赖并配置词云图,包括数据、形状、大小、颜色等。完整代码和依赖可下载。调整这些配置可创建个性化词云图。参阅官方文档获取不同版本详情。
6809 4
 ECharts词云图(案例一)+配置项详解
|
JavaScript
vue中使用echarts绘制双Y轴图表时,刻度没有对齐的两种解决方法
vue中使用echarts绘制双Y轴图表时,刻度没有对齐的两种解决方法
5018 0