Vue3+Echarts实现实时曲线及开始与暂停功能

最近做电力项目中,遇到这样一个需求:
用户选择设备的属性后(多选情况,可以选择不同设备的属性),然后请求各自的数据,使用折线图的形式实现趋势展示,同时要支持暂停和开始功能;

这个需求,重点在图表数据项的不确性,可能是一组数据,也可能是多组数据,所以要对echarts进行拆分;对于开始暂停功能,就是定时器的建立与清除;

第一步:使用设计模式思想,将变化的部分和不变的部分分开,echarts中的配置项option是固定的,series中的data数据项是变化;所以先实现曲线UI样式设计;

let option = ref({backgroundColor: '#374369',tooltip: {trigger: 'axis',axisPointer: {lineStyle: {color: '#ddd'}},backgroundColor: 'rgba(255,255,255,1)',padding: [5, 10],textStyle: {color: '#7588E4',},extraCssText: 'box-shadow: 0 0 5px rgba(0,0,0,0.3)'},legend: {show: true,shadowColor: "#fff",shadowBlur: 5,shadowOffsetX: 5,data: [],top: '5%',textStyle: {color: '#fff',fontSize: 14},itemHeight: 10},grid: {top: '30%',left: '7%',right: '8%',bottom: '10%',containLabel: true},xAxis: [{type: 'category',show: false,data: (function () {var now = new Date();var res = [];var len = 40; //显示个数while (len--) {res.unshift(now.toLocaleTimeString().replace(/^\D*/, ''));now = new Date(now - 2000);}return res;})(),boundaryGap: false,splitLine: {show: false},axisTick: {show: false},axisLine: {lineStyle: {color: '#2d67a7'}},axisLabel: {margin: 10,textStyle: {fontSize: 14}}}],yAxis: {type: 'value',splitLine: {show: false},axisTick: {show: false},axisLine: {lineStyle: {color: '#2d67a7'}},axisLabel: {margin: 10,textStyle: {fontSize: 14}}},// 需要动态生成的部分series: []
})

第二步:获取设备数据,进行渲染;

// 开始
function handleStart() {option.value.series = [] // 清空series数据缓存,防止重叠loading.value = true;emptyStatus.value = false;if (myChart.value) {myChart.value.dispose();}// 点击开始,实现DOM创建,否则回报错,因为不是页面加载时创建setTimeout(() => {myChart.value = proxy.$echarts.init(compare.value);}, 500);dataStatus.value = true;// 每次开始获取最新数据数据//图表默认数组var zhou1 = [], zhou2 = [], zhou3 = [], legends = ['总进线', '变频', '软起']for (var i = 0; i <= 40; i++) {zhou1[i] = 0;zhou2[i] = 0;zhou3[i] = 0;}const dataArray = []dataArray.push(zhou1)dataArray.push(zhou2)dataArray.push(zhou3)option.value.legend.data = legends// 使用for循环创建动态系列数据 ,就是形成多个series数据项 for (var i = 0; i < dataArray.length; i++) {option.value.series.push({//对配置项不熟悉的可以去查看官网文档资料name: legends[i],type: 'line',smooth: true,showSymbol: false,symbol: 'circle',symbolSize: 1,data: dataArray[i],itemStyle: {normal: getUniqueRandomColor(),emphasis: getUniqueRandomColor()},lineStyle: {width: 2,shadowColor: 'rgba(0,0,0,0.6)',shadowBlur: 10,shadowOffsetY: 5}});}// 使用定时器,进行曲线实时滚动timer.value = setInterval(function () {//数据为模拟随机数let electricityX = Math.random() * 100;let electricityY = Math.random() * 10;let electricityZ = Math.random() * 5;zhou1.shift();zhou1.push(electricityX);zhou2.shift();zhou2.push(electricityY);zhou3.shift();zhou3.push(electricityZ);let axisData = (new Date()).toLocaleTimeString().replace(/^\D*/, '');option.value.xAxis[0].data.shift();option.value.xAxis[0].data.push(axisData);//进行渲染myChart.value.setOption(option.value);}, 1000)//强制出现加载效果(业务目的),为了用户体验,哈哈哈哈setTimeout(() => {loading.value = false}, 500);
}

第三步:实现暂停效果,清除定时器;

// 暂停
function handleQuery() {dataStatus.value = false;clearInterval(timer.value);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/660575.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis -- 单线程模型

失败是成功之母 ——法国作家巴尔扎克 目录 单线程模型 Redis为什么这么快 单线程模型 redis只使用一个线程&#xff0c;处理所有的命令请求&#xff0c;不是说redis服务器进场内部真的就只有一个线程&#xff0c;其实也有多个线程&#xff0c;那就是处理网络和io的线程。 R…

MBR分区转换为GPT分区

这里有一个ecs-test用于测试MBR转换为GPT 新增一块数据盘 将数据盘以MBR分区格式分区 将整块磁盘以mbr形式分区 格式化&#xff0c;挂载等 上传文件&#xff0c;方便测试(以便后续转换格式类型&#xff0c;防止文件丢失) 取消挂载 将MBR转换为GPT 需先下载gdisk yum instal…

联盟营销最有效的方法是什么?

联盟营销就是“Affiliate marketing&#xff0c;是一种有效的市场推广策略&#xff0c;通过与其他相关企业或个人建立合作关系&#xff0c;共同推广产品或服务。每带来一次有效交易&#xff08;如用户购买、注册等&#xff09;&#xff0c;推广者就能获得佣金&#xff0c;将流量…

前端常见的栈溢出报错

什么是栈溢出&#xff1f; 在前端开发中&#xff0c;栈溢出是指JavaScript引擎执行代码时&#xff0c;调用栈&#xff08;call stack&#xff09;变得太大&#xff0c;超过了浏览器或JavaScript引擎所分配的栈空间&#xff0c;从而导致栈溢出错误。调用栈是一种数据结构&#x…

element plus dialog滚动条置顶问题

直接上解决方案了 <el-dialog v-model"DialogVisible" :destroy-on-close"true"><el-table :data"" :show-header"false" max-height"350"></el-table> </el-dialog>注意&#xff1a;主要是:destr…

WINHTTP忽略HTTPS证书

文章目录 WINHTTP忽略HTTPS证书WINHTTP使用TLS协议版本 WINHTTP忽略HTTPS证书 发布了Wininet库忽略Https证书文章之后有朋友问我如果使用WINHTTP发起忽略证书的方法, 下列粘出代码可以看到跟Wininet是一样的不在过多赘述&#xff0c;不懂的朋友可以看我发的链接说明。C发起Htt…

Spring-集成Web

一、引子 前面我们在Spring集成Junit中为读者引出了Spring善于集成其它框架的优势&#xff0c;而Spring项目不可能仅限于小范围的某个方法的测试&#xff0c;终究会落脚于Web项目上。于是&#xff0c;我们就从这里正式进入Spring集成Web的话题。由于笔者会从原生的Java Web开发…

@Test Annotation属性- dependsOnMethods属性

目录 语法 如果test1&#xff08;&#xff09;失败了怎么办&#xff1f;test2&#xff08;&#xff09;测试会发生什么&#xff0c;因为它依赖于test1&#xff1f; 如果我们在test1&#xff08;&#xff09;方法上不使用Test注释&#xff0c;但在test 2&#xff08;&#xf…

【产业实践】使用YOLO V5 训练自有数据集,并且在C# Winform上通过onnx模块进行预测全流程打通

使用YOLO V5 训练自有数据集,并且在C# Winform上通过onnx模块进行预测全流程打通 效果图 背景介绍 当谈到目标检测算法时,YOLO(You Only Look Once)系列算法是一个备受关注的领域。YOLO通过将目标检测任务转化为一个回归问题,实现了快速且准确的目标检测。以下是YOLO的基…

每日打卡 力扣2808 使循环数组所有元素相等的最少秒数

2808. 使循环数组所有元素相等的最少秒数 题目描述&#xff1a; 给你一个下标从 0 开始长度为 n 的数组 nums 。 每一秒&#xff0c;你可以对数组执行以下操作&#xff1a; 对于范围在 [0, n - 1] 内的每一个下标 i &#xff0c;将 nums[i] 替换成 nums[i] &#xff0c;num…

【centos系统ddos攻击】

centos系统ddos攻击&#xff0c;使用hping3和ab测试攻击模拟攻击 hping3工具 hping3 是一个命令行下使用的 TCP/IP 数据包组装/分析工具&#xff0c;通常 web 服务会用来做压力测试使 用&#xff0c;也可以进行 DOS 攻击的实验。同样 hping3 每次只能扫描一个目标。 安装hpin…

B2119 删除单词后缀

网址如下&#xff1a; B2119 删除单词后缀 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 算是找了个操作字符串的题来做 可以说C的string类确实是好用&#xff0c;但是还是不够熟悉&#xff0c;我不清楚怎么删去string类的后面几个字符 用C的常规做法是在相应地点设\0&…

2401cmake,学习cmake4

步10:增加生成式 生成器式是在构建系统生成时,执行的用来生成特定配置专有信息的工具. 可在诸如LINK_LIBRARIES,INCLUDE_DIRECTORIES,COMPILE_DEFINITIONS等许多目标属性内容中使用生成式. 也可在如target_link_libraries(),target_include_directories(),target_compile_de…

校园二手交易小程序|基于微信小程序的闲置物品交易平台设计与实现(源码+数据库+文档)

校园二手交易小程序目录 目录 基于微信小程序的闲置物品交易平台设计与实现 一、前言 二、系统功能设计 三、系统实现 1、用户信息管理 2、商品信息管理 3、公告信息管理 4、论坛信息管理 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕…

Vue之前端Broadcast Channel API的简单使用

前端Broadcast Channel API的简单使用 Broadcast Channel API 是一个用于在不同窗口或标签页之间进行通信的 API。它允许一个页面向另一个页面发送消息&#xff0c;这些页面可以在同一浏览器实例中打开&#xff0c;或者在不同的浏览器实例中打开。 以下是 Broadcast Channel …

R语言基础学习-02 (此语言用途小众 用于数学 生物领域 基因分析)

变量 R 语言的有效的变量名称由字母&#xff0c;数字以及点号 . 或下划线 _ 组成。 变量名称以字母或点开头。 变量名是否正确原因var_name2.正确字符开头&#xff0c;并由字母、数字、下划线和点号组成var_name%错误% 是非法字符2var_name错误不能数字开头 .var_name, var.…

蓝桥杯备战——11.NE555测频

1.分析原理图 我们可以看到&#xff0c;上图就是一个NE555构建的方波发生电路&#xff0c;输出方波频率1.44/2(R8Rb3)C,如果有不懂NE555内部结构&#xff0c;工作原理的&#xff0c;可以到B站学习。实在不懂仿真也行&#xff0c;比如我下面就是仿真结果&#xff1a; 然后就是下…

与数组相关经典面试题

&#x1d649;&#x1d65e;&#x1d658;&#x1d65a;!!&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦ &#x1f44f;&#x1f3fb;‧✧̣̥̇:Solitary-walk ⸝⋆ ━━━┓ - 个性标签 - &#xff1a;来于“云”的“羽球人”。…

su导入3d模型为什么不圆滑---模大狮模型网

在将SU(SketchUp)模型导入到其他3D软件中时&#xff0c;可能会遇到模型没有圆滑的情况。这可能是由于以下原因&#xff1a; 模型导出设置不正确&#xff1a;在导出SU模型时&#xff0c;需要确保正确选择导出设置。例如&#xff0c;在导出为.obj格式时&#xff0c;需要选择正确的…

免费的ChatGPT网站 ( 7个 )

ChatGPT的核心功能是基于用户在输入时的语言或文本生成相应的回复或继续内容。此外&#xff0c;它还能够完成多种任务&#xff0c;如撰写邮件、视频脚本、文案、翻译、代码编写以及撰写论文等。 博主归纳总结了7个国内非常好用&#xff0c;而且免费的chatGPT网站&#xff0c;AI…