当前位置: 首页 > news >正文

echarts拖动进度条,动态更新数据

需求

最近有这么一个需求,公司呢要做一个数据分析表格,但是呢数据太大,没法全部传过来,产品希望用户可以通过滑动进度条,我们动态的去获取数据,今天刚有个思路,试验了一下,走了几个坑,最终还是完成了,分享给大家

技术栈

vue + echarts

思路

首先我们需要监听滑动进度条这个事件,也就是echarts的dataZoom的事件,百度了一下是这样的

this.echartsInstance.on("dataZoom", (params) => {//事件代码
}); 

params是返回来的一个对象

  • end:进度条右面距离开始的长度
  • start:进度条左前面距离开始的长度

所以我们可以根据用户移动了多长的距离,再去更新数据

实现

先创建一个项目,配置一下echarts 我的echarts配置如下

options: {dataZoom: [{// 增加滚动条以及鼠标拖动滚动条功能type: "slider",backgroundColor: "rgba(19, 28, 59, 1)",fillerColor: "rgba(38, 128, 255, 1)",borderColor: "transparent",startValue: 0,endValue: 8,zoomLock: true,height: "2%",bottom: 0,brushSelect: false,showDetail: false,handleStyle: { opacity: 0 },dataBackground: {lineStyle: { opacity: 0 },areaStyle: { opacity: 0 },},},],xAxis: {type: "category",axisTick: false,data: ["1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","","","","","","","","","","","","","","","","","","","",],},yAxis: [{type: "value",name: "人数",position: "left",},],grid: {left: "20%",},series: [{data: [150, 230, 224, 218, 135, 147, 260, 150, 230, 224, 218, 135, 147,260,],type: "line",name: "人数",},],}, 

dataZoom就是开启进度条的功能,xAxis是x轴,为什么要给他那么多的空值呢?因为我们需要x轴长度固定,不然我们向里面添加数据会导致dataZoom的进度条变小,不好看

把这个配置传给echarts实例就可以生成表,然后需要监听dataZoom的变化

 mounted() {this.echartsInstance = echarts.init(this.$refs.myEchartRef);this.echartsInstance.setOption(this.options);this.echartsInstance.on("dataZoom", (params) => {});}, 

选择在mounted时候加载图表

那么当我们什么时候才需要去获取数据呢?

因为我给dataZoom一个startValue和endValue,表示它可以展示9个数据,我们获取的时候可以获取18个数据,当进度天滑动时候,找到9个数据/总数据的比值,如果进度条滑动距离大于这个比值,那么意味着我们需要获取数据了

获取数据后,再把数据用splite添加到option的xAxis的data中,

我们会发现此时的echarts根本没刷新,如果想刷新,还需要监听一下options属性,然后再调用setOptions方法,但是千万不要后面跟上true,因为跟上true意味着全部清空属性,而不是添加属性

 watch: {options: {handler() {this.echartsInstance.setOption({ xAxis: this.options.xAxis });},deep: true,},}, 

watch要开启深度监听,而且只给她一个xAxis,不是把这个options给他,他会帮我们和旧的options合并的

当进度条滑动需要执行的

this.echartsInstance.on("dataZoom", (params) => {//tick类似与节流if (params.start - this.tick >= 10) {//找到第一个为空的数据const index = this.options.xAxis.data.indexOf("");添加数据this.options.xAxis.data.splice(index,this.xAxisArray.length,...this.xAxisArray);this.tick = params.start;}}); 

这样基本上就是实现了,但是在实际系统上需要把他写成异步,因为我们需要在服务器获取数据,看一下效果

展示

echarts配置太多了,烦死了

最后

整理了75个JS高频面试题,并给出了答案和解析,基本上可以保证你能应付面试官关于JS的提问。



有需要的小伙伴,可以点击下方卡片领取,无偿分享

相关文章:

  • MATLAB | MATLAB中绘图的奇淫技巧合集
  • 指针笔试题解析(4)
  • [Spring Boot 3] 整合NoSQL与构建RESTful服务
  • 基于非线规划算法的船舶能量调度
  • 二、PL/SQL 编程基础
  • NGINX源码之:ngx_open_cached_file
  • 【路径规划-机器人栅格地图】基于蚁群算法求解大规模栅格地图路径规划及避障附Matlab代码
  • SpringCache的介绍和使用
  • java-php-python-ssm艾灸减肥管理网站计算机毕业设计
  • 力扣每日一题2022-09-23中等题:设计链表
  • 内存数据库简介-内存数据库性能排行
  • 【云原生】Hadoop on k8s 环境部署
  • 不同编码格式(Unicode、多字节字符)vs环境下使用printf、scanf应注意事项
  • 使用Express获取jquery数据 使用模块化 共享自己的数据库
  • Python算法:决策树分类
  • 深入了解以太坊
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • Angular Elements 及其运作原理
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • Java比较器对数组,集合排序
  • JS学习笔记——闭包
  • PHP CLI应用的调试原理
  • 阿里云前端周刊 - 第 26 期
  • 从伪并行的 Python 多线程说起
  • 第2章 网络文档
  • 对象管理器(defineProperty)学习笔记
  • 翻译 | 老司机带你秒懂内存管理 - 第一部(共三部)
  • 高性能JavaScript阅读简记(三)
  • 工程优化暨babel升级小记
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • 异常机制详解
  • - 转 Ext2.0 form使用实例
  • 进程与线程(三)——进程/线程间通信
  • "无招胜有招"nbsp;史上最全的互…
  • # 飞书APP集成平台-数字化落地
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • #include
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (4)事件处理——(7)简单事件(Simple events)
  • (MATLAB)第五章-矩阵运算
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (免费领源码)Python#MySQL图书馆管理系统071718-计算机毕业设计项目选题推荐
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (转)清华学霸演讲稿:永远不要说你已经尽力了
  • .net 8 发布了,试下微软最近强推的MAUI
  • .NET Micro Framework初体验(二)
  • .NET(C#) Internals: as a developer, .net framework in my eyes
  • ?php echo ?,?php echo Hello world!;?
  • [1525]字符统计2 (哈希)SDUT
  • [2018][note]用于超快偏振开关和动态光束分裂的all-optical有源THz超表——