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图,刚发现的神器,有需要的可以下载来用用,操作界面很简洁。免费!!!

相关推荐
知花实央l16 分钟前
【Web应用实战】 文件上传漏洞实战:Low/Medium/High三级绕过(一句话木马拿webshell全流程)
前端·学习·网络安全·安全架构
华仔啊16 分钟前
JavaScript + Web Audio API 打造炫酷音乐可视化效果,让你的网页跟随音乐跳起来
前端·javascript
鸡吃丸子19 分钟前
SEO入门
前端
檀越剑指大厂1 小时前
【Nginx系列】Tengine:基于 Nginx 的高性能 Web 服务器与反向代理服务器
服务器·前端·nginx
是你的小橘呀1 小时前
深入理解 JavaScript 预编译:从原理到实践
前端·javascript
uhakadotcom1 小时前
在使用cloudflare workers时,假如有几十个请求,如何去控制并发?
前端·面试·架构
风止何安啊1 小时前
栈与堆的精妙舞剧:JavaScript 数据类型深度解析
前端·javascript
用户47949283569151 小时前
Chrome DevTools MCP:让 AI 助手直接操作浏览器开发工具
前端·javascript·chrome
Rysxt_2 小时前
Vuex 教程 从入门到实践
前端·javascript·vue.js
by__csdn2 小时前
Node.js版本与npm版本的对应关系
前端·npm·node.js