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

相关推荐
天宇&嘘月2 小时前
web第三次作业
前端·javascript·css
小王不会写code2 小时前
axios
前端·javascript·axios
发呆的薇薇°3 小时前
vue3 配置@根路径
前端·vue.js
luckyext3 小时前
HBuilderX中,VUE生成随机数字,vue调用随机数函数
前端·javascript·vue.js·微信小程序·小程序
小小码农(找工作版)3 小时前
JavaScript 前端面试 4(作用域链、this)
前端·javascript·面试
前端没钱4 小时前
前端需要学习 Docker 吗?
前端·学习·docker
前端郭德纲4 小时前
前端自动化部署的极简方案
运维·前端·自动化
海绵宝宝_4 小时前
【HarmonyOS NEXT】获取正式应用签名证书的签名信息
android·前端·华为·harmonyos·鸿蒙·鸿蒙应用开发
码农土豆5 小时前
chrome V3插件开发,调用 chrome.action.setIcon,提示路径找不到
前端·chrome
鱼樱前端5 小时前
深入JavaScript引擎与模块加载机制:从V8原理到模块化实战
前端·javascript