# 前言

开发过 大屏可视化 应用的前端工程师们通常会有这样的共识:

在可视化开发过程中,最具有挑战性的并非 各种图表 的配置与 效果展示 ,而是如何确保 大屏不同尺寸 的屏幕上都能实现良好的适配。

# 原始解决方案

起初比较流行的 三大 解决方式:

# rem 方案

  • 动态设置 HTML 根字体大小和 body 字体大小,配合 百分比 或者 vw/vh 实现容器 宽高字体大小位移 的动态调整

# vw/vh 方案

  • 像素值 (px)按 比例 换算为视口 宽度 (vw)和视口 高度 (vh),能够实时计算图表尺寸、字体大小等

# scale 方案

  • 根据 宽高比例 进行动态缩放,代码简洁,几行代码即可解决,但是遇到一些 地图 或者 Canvas 中的点击事件,可能会存在错位问题,需要做针对性的调整适配

以上三种方式,都能够实现大屏的基本适配!

但是在开发过程中需要对 每个字体容器 去做相应的计算调整,相对来说较为 繁琐 ,而且在 团队协作 过程中也容易出现问题。

那么有没有一种方式,只需要 简单的一些配置 ,就能完全搞定大屏在不同尺寸的屏幕上都能实现 良好的适配

以下给大家推荐 三个方案 ,只需要简单的几行代码配置,可以完全解决大屏开发中的适配问题,让你效率翻倍!!!

# autofit.js

autofit.js 基于 比例缩放 原理,通过动态调整容器的宽度和高度来实现全屏填充,避免元素的挤压或拉伸。

autofit.js 提供了一种简单而有效的方法来实现网页的自适应设计,尤其适合需要在 不同分辨率屏幕尺寸 下保持布局一致性的应用场景。

# 安装

npm i autofit.js

# 配置

import autofit from 'autofit.js';
onMounted(() => {
    autofit.init({
        el: '#page',
        dw: 375,
        dh: 667
    })
})
   * - 传入对象,对象中的属性如下:
   * - el(可选):渲染的元素,默认是 "body"
   * - dw(可选):设计稿的宽度,默认是 1920
   * - dh(可选):设计稿的高度,默认是 1080
   * - resize(可选):是否监听resize事件,默认是 true
   * - ignore(可选):忽略缩放的元素(该元素将反向缩放),参数见readme.md
   * - transition(可选):过渡时间,默认是 0
   * - delay(可选):延迟,默认是 0

# 源码地址

Github 地址:https://github.com/995231030/autofit.js

# v-scale-screen

大屏自适应 容器组件 ,可用于大屏项目开发,实现屏幕自适应,可根据 宽度自适应高度自适应 ,和 宽高等比例自适应全屏自适应 (会存在拉伸问题),如果是 React 开发者,可以使用 r-scale-screen

# 安装

npm install v-scale-screen
# or
yarn add v-scale-screen

# 配置

<template>
  <v-scale-screen width="1920" height="1080">
    <div>
      <v-chart>....</v-chart>
      <v-chart>....</v-chart>
      <v-chart>....</v-chart>
      <v-chart>....</v-chart>
      <v-chart>....</v-chart>
    </div>
  </v-scale-screen>
</template>
<script>
import { defineComponent } from 'vue'
import VScaleScreen from 'v-scale-screen'
export default defineComponent({
  name: 'Test',
  components: {
    VScaleScreen
  }
})
</script>

# 源码地址

github 地址:https://github.com/Alfred-Skyblue/v-scale-screen

# FitScreen

一种基于 缩放 的大屏自适应解决方案的基本方法,一切都是基于设计草图的像素尺寸,通过 缩放 进行 适配 ,一切都变得如此简单。

支持 vue2vue3 以及 react ,可以适用于任何框架,只要一点点代码。

# 安装

npm install @fit-screen/vue
# or
yarn add @fit-screen/vue
# or
pnpm install @fit-screen/vue

# 配置

<script setup>
import FitScreen from '@fit-screen/vue'
</script>
<template>
  <FitScreen :width="1920" :height="1080" mode="fit">
    <div>
      <a href="https://vitejs.dev" target="_blank">
        <img src="/vite.svg" class="logo" alt="Vite logo">
      </a>
      <a href="https://vuejs.org/" target="_blank">
        <img src="./assets/vue.svg" class="logo vue" alt="Vue logo">
      </a>
    </div>
    <HelloWorld msg="Vite + Vue" />
  </FitScreen>
</template>

# 源码地址

github 地址:https://github.com/jp-liu/fit-screen