vue3+echarts实现任务管理器CPU性能图(window版)

前言

公司主要做的是实时数据库类的项目,用户下载软件后想要知道软件占的内存、磁盘等性能信息。最近开发web版数据库工具,也需要把这个原本在桌面端的功能移植过来,因此写这篇文章来记录一下这个功能,主要是思路这一块,大家有遇到类似的需求可以参考下,如果对你有帮助,那就太好不过了。

思路

首先分析window版的性能图,从60秒到0的数据是倒叙分布的,因此关键点在于让展示的数据从后往前添加,且只能保留60个。所以我的办法是展示的数据(chartData )可以放60个空字符串,在定时器中,使用push方法添加数据,超过60后,删除掉第一个数据。x轴(xAxisData)的话同理放60个空字符串,然后第一个替换成60秒,最后一个替换成0,来完成样式,下面就是具体的实现了,不说太多,直接上代码,复制到你的项目中直接使用

代码

js 复制代码
<template>
  <div class="cpuChart-wrapper">
    <div id="cpuChart" style="width: 440px; height: 400px;"></div>
  </div>
</template>

<script setup>
import { onMounted, nextTick } from 'vue';
import * as echarts from 'echarts';

const createChart = () => {

  let myChart = echarts.init(document.getElementById('cpuChart'));

  // 61是为了让数据贴合最右侧网格线,对逻辑没影响
  const chartData = Array(61).fill('')

  const xAxisData = Array(60).fill('')
  // splice(60, 0, '0')作用:不这样写,最右侧会少一列分割线,不影响逻辑
  xAxisData.splice(0, 1, '60秒')
  xAxisData.splice(60, 0, '0')

  const option = {
    // 很关键,默认是true会让图表数据闪烁
    animation: false,
    title: [
      {
        text: "CPU",
        left: "40%"
      },
      {
        text: "100%",
        right: "4%",
        top: "7%",
        textStyle: {
          color: "#777",
          fontSize: 12,
          fontWeight: 'normal',
        },
      }
    ],
    xAxis: {
      boundaryGap: false,
      data: xAxisData,
      type:'category',
      splitLine:{
        show: true, // 网格显示
        lineStyle: {// 网格样式
          color:['#ccc'], // 网格颜色
          width:1, // 网格宽度
          type:'solid' // 网格实线
        }
      },
      // 隐藏坐标轴的分割线
      axisTick: {
        show: false
      }
    },
    yAxis:{
      name: '%利用率',
      type: 'value',
      axisLabel: {
        show: false
      }
    },
    series: [
      {
        type: "line",
        data: chartData,
        areaStyle: {
          color: "#d5e5ff"
        },
        lineStyle: {
          width: 0
        },
        showSymbol: false,
      }
    ]
  }

  // 绘制图表
  myChart.setOption(option);

  setInterval(() => {
    // Math.random() * 100是随机数,实际应用场景中,数据从接口获取
    chartData.push(Math.random() * 100)
    if (chartData.length >= 60) {
      chartData.shift()
    }
    myChart.setOption({
      series: [
        {
          data: chartData
        }
      ]
    })
  },1000)
}

onMounted(() => {
  nextTick(() => {
    createChart()
  })
})
</script>

<style lang='scss' scoped>
</style>

效果

工具推荐

最后这个图是通过Gifski(Mac)做的,这个工具可以把录屏转为GIF图,刚发现的神器,有需要的可以下载来用用,操作界面很简洁。免费!!!

相关推荐
xiaofeichaichai2 小时前
Webpack
前端·webpack·node.js
问心无愧05132 小时前
ctf show web入门111
android·前端·笔记
唐某人丶3 小时前
模型越来越强,我们还需要 Agent 工程吗?—— 从价值重估到 Harness 实践
前端·agent·ai编程
智码看视界3 小时前
现代Web开发基础:全栈工程师的起航点
前端·后端·c5全栈
JS菌3 小时前
手写一个 AI Agent 全栈项目:从沙箱执行到子智能体的完整实现
前端·人工智能·后端
excel4 小时前
HLS TS 文件损坏的元凶:Git 提交与拉取
前端
Aphasia3114 小时前
https连接传输流程
前端·面试
徐小夕4 小时前
万字长文!千万级文档 RAG 知识库系统落地实践
前端·算法·github
threelab5 小时前
Three.js 物理模拟着色器 | 三维可视化 / AI 提示词
开发语言·前端·javascript·人工智能·3d·着色器