大屏可视化项目实践

200 阅读1分钟

项目介绍

本项目主要使用了ReactEChartsTSXSCSS等技术栈,项目使用Grid以及Flex布局,并采用rem方案实现屏幕大小自适应。项目包含多种类型图表,包括柱形图、折线图、饼图、地图和表格等,所有图例都可以实时更新数据并辅以动画交互。

一、如何使用 rem 和 px 函数适配各种屏幕

1. 计算方法

image.png

image.png

image.png

  • Wp 为页面有效宽度,Hp 为页面有效高度
  • 页面左右居中,上下居中,四周留白即可
  • 然后在 head 里用 JS 设置 1rem = Wp / 100(下文中会用到)

代码示例

<script>
      const clientWidth = document.documentElement.clientWidth;
      const clientHeight = document.documentElement.clientHeight;
      window.pageWidth =
        clientWidth / clientHeight > 16 / 9
          ? clientHeight * (16 / 9)
          : clientWidth;
      const pageHeight = pageWidth / (16 / 9);
      const string = `<style>html{
        font-size: ${pageWidth / 100}px
      }</style>`;
      document.write(string);
    </script>

2. rem

image.png

  • 假设某 div 在设计稿中长 100px,设计稿宽度 1920px,
  • 那么该 div 在页面中长为 100/1920 X 100rem
  • 最后可以写一个 px() 函数来计算 100px 对应的 rem

二、如何使用 grid 布局

  1. Grid布局在本项目中主要用来构建布局框架
  2. 使用Grid布局的理由:大屏一般是可控的,可以装 Chrome,基本不存在兼容问题;Grid 布局方便了,行、列、间隙都可控
> main {
    display: grid;
    grid-template:
      "box1 box2 box4 box5" 755fr
      "box3 box3 box4 box5" 363fr / 366fr 361fr 811fr 747fr;
    grid-column-gap: px(28);
    grid-row-gap: px(28);

三、如何使用 echarts

使用Echarts 的优点:开发效率高;缺点:可定制性一般,部分图形不能设置理想样式。

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>ECharts</title>
    <!-- 引入下载的 ECharts 文件 -->
    <script src="echarts.js"></script>
  </head>
  <body>
    <!-- 为 ECharts 准备一个定义了宽高的 DOM -->
    <div id="main" style="width: 600px;height:400px;"></div>
    <script type="text/javascript">
      // 基于准备好的dom,初始化echarts实例
      var myChart = echarts.init(document.getElementById('main'));

      // 指定图表的配置项和数据
      var option = {
        title: {
          text: 'ECharts 入门示例'
        },
        tooltip: {},
        legend: {
          data: ['销量']
        },
        xAxis: {
          data: ['衬衫', '羊毛衫', '雪纺衫', '裤子', '高跟鞋', '袜子']
        },
        yAxis: {},
        series: [
          {
            name: '销量',
            type: 'bar',
            data: [5, 20, 36, 10, 10, 20]
          }
        ]
      };

      // 使用刚指定的配置项和数据显示图表。
      myChart.setOption(option);
    </script>
  </body>
</html>