“实时数据大屏2k、4k、8k”这样做【高级前端必备技能之一】

🔥废话不多先上效果图

在这里插入图片描述

🔥划重点

新手程序员需要注意以下几点:

  1. 我们需要进行充分的技术调研,进行技术选型
  2. 产品,UI,再三确认效果图是否确定,避免后续出现返工的情况

不能拿到效果图之后,一股脑就开始排期,进入开发流程,首先和产品以及UI等同事确认好之后,分析是否存在比较难实现的效果,提出来,大家一起想替换方案,避免后期因为某些效果不能实现阻塞整体的开发进度,这也算是一些日常工作中的一些需要注意的地方。

🔥 技术选型

数据统计大屏,目前市面主流的技术 Echarts 和 阿里旗下的 AntV 这两大厂商做的还是很好的,根据效果图中的图表,在对应的官网,文档中浏览,找到一个图表比较全的,文档比较清晰的图表库,按照到文档的流程安装到项目中。

  1. AntV 官网
  2. Echarts官网

🔥图表组件开发

完成技术选型之后,我们就可以进行前端静态页面的开发,按照组件化的开发思维,对页面进行合理的组件划分,提高代码复用性的同时也便于后期维护。
我们选择 Echarts 图表库,可以结合自身需求进行选择
下面是一个毛坯版本的柱状图组件,要实现效果图比较炫酷的效果,我们只需要基于这个毛坯版本,按照官网文档提供的方法,对一些图表的颜色**(线条颜色、文本颜色、图表颜色、lenged颜色)**进行个性化的设置即可满足效果。
在这里插入图片描述

<template>
  <div ref="dom" class="charts chart-bar"></div>
</template>

<script>
import echarts from "echarts";
import { on, off } from "@/libs/tools";
export default {
  name: "ChartBar",
  props: {
    value: Object,
    text: String,
    name: String,
    conversion: {
      default: false,
    },
  },
  data() {
    return {
      dom: null,
    };
  },
  methods: {
    resize() {
      this.dom.resize();
    },

    initChart() {
      this.$nextTick(() => {
        let option = {
          title: {
            text: this.text,
            left: "left",
            textStyle: {
              fontSize: 16,
              fontStyle: "normal",
              color: "#333",
            },
          },
          tooltip: {
            backgroundColor: "rgba(0,0,0,0.8)",
            padding: [10, 15, 10, 15],
            trigger: "item",
            formatter: "{a} <br/>{b} : {c}",
          },
          grid: {
            top: "30px",
            left: "20px",
            right: "20px",
            bottom: "0px",
            containLabel: true,
          },
          xAxis: [
            {
              type: "category",
              data: this.value.xAxis.data,
              axisTick: {
                alignWithLabel: true,
              },
              axisLabel: {
                color: "#333",
              },
              axisLine: {
                show: true,
                lineStyle: {
                  color: "#DDDDDD",
                  width: 1,
                },
              },
            },
          ],
          yAxis: [
            {
              type: "value",
              axisTick: {
                 show:false,
                alignWithLabel: false,
              },
              splitLine: {
                show: true,
                lineStyle: {
                  type: "dashed",
                },
              },
              axisLabel: {
                color: "#333",
              },
              axisLine: {
                show: true,
                lineStyle: {
                  color: "#DDDDDD",
                  width: 1,
                },
              },
            },
          ],
          series: [
            {
              name: this.name,
              type: "bar",
              barWidth: "24px",
              itemStyle: {
                color: "#4586FF",
              },
              label: {
                show: true,
                position: "top",
                color: "#333",
              },
              data: this.value.series.data,
            },
          ],
        };

        this.dom.setOption(option);
        // 防止初始化时图表大小错误
        this.resize();
      });
    },
  },
  onMo() {
    this.dom = echarts.init(this.$refs.dom, "tdTheme");
    on(window, "resize", this.resize);
  },
  beforeDestroy() {
    off(window, "resize", this.resize);
  },
  watch: {
    value: {
      handler(val, oldVal) {
        this.initChart();
      },
      deep: true,
      immediate: true,
    },
  },
};

🔥组件使用

<chart-bar
	:showLegend="true"
	style="width: 900px; height: 700px"
	:value="MapData"
	text="柱状图"
	name="星座图"
/>

🔥屏幕适配

F12 之后选择手机Ipad模式,选择 Edit 自定义 屏幕的宽高,可以自定义 比如 4K分辨率8K分辨率,满足业务需求即可。
后续在开发调试,可以选择不同的设备进行适配兼容。个人可以根据自身情况选择布局模式(百分比rempostcss插件等)均可,已实现业务需求为主。
在这里插入图片描述

🔥实时数据获取

目前有三种方案:

  1. 前端定时轮询(不太建议)
  2. SSE后端主动推送(建议)
  3. WebSocket 通信(不建议)

🦟 首先说为什么不建议第三种,有点复杂,不管前端还是后端,有点打炮打蚊子嫌疑,完全没必要
🦟大多数可能都采用第一种方案,毕竟第一种方案完全不需要后端配合,只需要前端定时的去轮询调用查询接口即可,但是要需要注意,轮询也有很多弊端,详情见之前的文章,感兴趣的可以看看
https://blog.csdn.net/weixin_43742274/article/details/139918425?spm=1001.2014.3001.5502
🦟 第二种方案相对第一种和第三种我个人觉得是最好的,但是要需要后端同学配合
大家可以根据自己公司的调性进行选型,因为我们公司比较注重性能、信息安全这类的采用的第二种

🔥 结语

本文主要介绍,从0到1 实现一个实时数据大屏的基本过程,这个大体的技术框架基本可以覆盖市面上80%的公司业务需求,除非有些特殊的大屏需要做特殊处理,希望这篇文章能够给你带来一些技术上的提升。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值