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

相关推荐
qq_3643717241 分钟前
Vue 内置组件 keep-alive 中 LRU 缓存淘汰策略和实现
前端·vue.js·缓存
y先森2 小时前
CSS3中的弹性布局之侧轴的对齐方式
前端·css·css3
y先森7 小时前
CSS3中的伸缩盒模型(弹性盒子、弹性布局)之伸缩容器、伸缩项目、主轴方向、主轴换行方式、复合属性flex-flow
前端·css·css3
前端Hardy7 小时前
纯HTML&CSS实现3D旋转地球
前端·javascript·css·3d·html
susu10830189117 小时前
vue3中父div设置display flex,2个子div重叠
前端·javascript·vue.js
IT女孩儿8 小时前
CSS查缺补漏(补充上一条)
前端·css
吃杠碰小鸡9 小时前
commitlint校验git提交信息
前端
虾球xz9 小时前
游戏引擎学习第20天
前端·学习·游戏引擎
我爱李星璇9 小时前
HTML常用表格与标签
前端·html
疯狂的沙粒9 小时前
如何在Vue项目中应用TypeScript?应该注意那些点?
前端·vue.js·typescript