位置: IT常识 - 正文

怎么让 echarts 图表动起来?定时器解决它 —— 大屏展示案例(动态仪表盘、动态柱状图)(echarts怎么样)

编辑:rootadmin
怎么让 echarts 图表动起来?定时器解决它 —— 大屏展示案例(动态仪表盘、动态柱状图)

推荐整理分享怎么让 echarts 图表动起来?定时器解决它 —— 大屏展示案例(动态仪表盘、动态柱状图)(echarts怎么样),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:echarts图表位置设置,echarts作图,echarts设置图例,echarts设置图形大小,echarts设置图表大小,echarts设置图例,echarts图形,echarts设置图表大小,内容如对您有帮助,希望把文章链接给更多的朋友!

        该案例为了实现效果采用的是随机生成数据,比较适用于偏向展示效果的静态页面如门户网站的首页、登录页等等。颜色样式自调。

        需要注意在有些项目中仪表盘可能无法正常显示,这是因为你在项目中引入的 echarts 版本太低,需要引入新版本 echarts5。

目录

一、案例效果

二、实现步骤

1.创建页面结构 

2.创建方法绘制图表并调用

3.在option设置图表及其样式

三、要点知识总结

四、完整代码+详细注释


一、案例效果

做案例之前正常引入 echarts 图表,echarts 依赖包的下载和安装此处省略,详情可参见文章:

在Vue项目中引入 ECharts 3D 路径图 Flights GL(需安装echarts、echarts-gl、jQuery依赖,已踩坑)_来跟小马一起探讨前端知识吧~-CSDN博客在Vue项目中引入 echarts 3D 路径图 Flights GL;echarts依赖包的下载方式;echarts-gl依赖包的下载方式;jQuery依赖包的下载方式;https://blog.csdn.net/weixin_53072519/article/details/122087289

二、实现步骤1.创建页面结构 怎么让 echarts 图表动起来?定时器解决它 —— 大屏展示案例(动态仪表盘、动态柱状图)(echarts怎么样)

        两个带有 id 名的容器,样式自定。 

<template> <div style="width: 100%;"> <!--仪表盘--> <div id="gauge"></div> <!--柱图--> <div id="bar"></div> </div></template><style scoped> #gauge { width: 8rem; height: 5.5rem; position: absolute; top: 2.55rem; left: 5.7rem; } #bar { width: 8rem; height: 2.2rem; position: relative; top: 2.8rem; left: 5.7rem; }</style>2.创建方法绘制图表并调用

        methods 中分别创建绘制图表的方法 ,然后在挂载阶段 mounted 中分别调用。

<script>export default { data() { return {}; }, methods: { //绘制柱状图 draw_bar() { let myEchart = this.$echarts.init(document.getElementById("bar")); var option = {}; myEchart.setOption(option); }, //绘制仪表盘 draw_gauge() { let myEchart = this.$echarts.init(document.getElementById("gauge")); var option = {}; myEchart.setOption(option); }, }, mounted() { //调用绘制图表的方法 this.draw_bar(); this.draw_gauge(); },};</script>3.在option设置图表及其样式

        可直接将官网案例的代码复制到 option 处后自行修改。 

三、要点知识总结

        实现图表动态变化的原理其实就是基于定时器 setInterval() ,它与 setTimeout() 区别是 setInterval() 是周期性的,按照给定的时间周期反复循环的执行包含在它里面的程序,而setTimeout() 是在给定的时间后执行一次程序就结束。

        所以我们的做法就是,设置循环定时器,每隔一定的时间便获取一次图表中的数据且数据完全随机,并重新显示图表,然后在设置合适的动画和间隔时间,这样就实现了图表的动态变化。

比如柱状图的定时器设置如下:

setInterval(() => { for (let i = 0; i <= 11; i++) { //定义i确保柱图的每一项都能被刷新 option.series[0].data[i] = (Math.round(Math.random() * 600) + 1); //数据随机取值1-600,不要为0,如果为0的话该柱就会消失 } myEchart.setOption(option, true); //每刷新一次重新显示图表 }, 200);

        每隔200毫秒重新定义一次柱状图中的数据(option.series[0].data[i]) ,此处为1-600的随机数,每次数据更新后重新显示图表(myEchart.setOption(option, true)),这样就达到了数据不停变化的效果。

        然后就是动画,在echarts官网中配置项文档中有该类属性,可以设置仪表盘指针的变换速度、柱图中的柱变换速度等。

animation: true是否开启动画

animationDuration: 1020

初始动画的时长animationDurationUpdate: 1020数据更新动画的时长animationEasingUpdate: "quadraticIn"数据更新动画的缓动效果

        最后将动画时长与定时器间隔时长合理搭配即可实现动态效果。

四、完整代码+详细注释<template> <div style="width: 100%;"> <!--仪表盘--> <div id="gauge"></div> <!--柱图--> <div id="bar"></div> </div></template><script> export default { data() { return {} }, methods: { // 绘制柱状图 draw_bar() { let myEchart = this.$echarts.init(document.getElementById("bar")); var option = { xAxis: { type: 'category', data: ['银宝', '个险', '团险', '银宝', '个险', '团险', '银宝', '个险', '团险', '银宝', '个险', '团险'], axisLine: { show: true, onZero: true, symbol: "none", lineStyle: { color: "#e5e5e5" } }, axisTick: { show: false }, }, yAxis: { show: false, type: 'value', axisTick: { show: false }, axisLine: { show: false }, axisLabel: { show: false } }, //图表与容器的位置关系 grid: { left: '3%', // 与容器左侧的距离 right: '3%', // 与容器右侧的距离 top: '11%', // 与容器顶部的距离 bottom: '12%', // 与容器底部的距离 }, series: [ { data: [520, 600, 450, 380, 370, 510, 120, 200, 150, 620, 600, 450,], type: 'bar', backgroundStyle: { color: "rgba(111, 111, 22, 1)" }, //坐标轴显示器的文本标签 label: { show: true, position: 'top', color: '#e5e5e5' }, //柱条颜色 itemStyle: { color: { type: 'linear', x: 0, y: 0, x2: 0, y2: 1, colorStops: [{ offset: 0, color: 'rgba(0,234,223,0.9)' // 0% 处的颜色 }, { offset: 1, color: 'rgba(0,234,223,0.3)' // 100% 处的颜色 }], global: false // 缺省为 false } }, animationEasing: "linear", animationEasingUpdate: "quadraticIn", //数据更新时的缓动效果 animationDurationUpdate: 300, //数据更新动画的时长 animation: true //开启动画 } ] }; //此处使用定时器setInterval循环刷新柱状图的值,每次刷新数据均不同 setInterval(() => { for (let i = 0; i <= 11; i++) { //定义i确保柱图的每一项都能被刷新 option.series[0].data[i] = (Math.round(Math.random() * 600) + 1); //数据随机取值1-600,不要为0,如果为0的话该柱就会消失 } myEchart.setOption(option, true); //每刷新一次重新显示图表 }, 200); }, //绘制仪表盘 draw_gauge() { let myEchart = this.$echarts.init(document.getElementById("gauge")); var option = { series: [ //左侧仪表盘 { name: 'gauge 1', type: 'gauge', min: 0, max: 150, startAngle: 230, endAngle: -310, splitNumber: 5, radius: '35%', center: ['21%', '55%'], axisLine: { lineStyle: { color: [[1, '#34FFCA']], width: 12, } }, splitLine: { distance: -7, length: 16, lineStyle: { color: '#fff', width: 1 } }, axisLabel: { distance: 2, fontSize: 10, fontWeight: 400, fontFamily: 'Arial', color: '#fff' }, anchor: {}, pointer: { width: 5, length: '60%', itemStyle: { color: '#fff' } }, detail: { show: false }, data: [ { value: 20 } ], animationEasing: "linear", animationEasingUpdate: "quadraticIn", //数据更新时的缓动效果 animationDurationUpdate: 1000, //数据更新动画的时长 animation: true //开启动画 }, //中间的仪表盘 { name: 'gauge 2', type: 'gauge', min: 0, max: 180, z: 10, startAngle: 210, endAngle: -30, splitNumber: 9, radius: '50%', center: ['50%', '50%'], axisLine: { show: false, lineStyle: { width: 2, color: [ [0.825, '#fff'], ] } }, splitLine: { distance: 35, length: 22, lineStyle: { color: '#fff', width: 1 } }, axisLabel: { distance: 3, fontSize: 12, fontWeight: 400, fontFamily: 'Arial', color: '#fff' }, anchor: {}, pointer: { width: 6, offsetCenter: [0, '-10%'], length: '75%', itemStyle: { color: '#fff' } }, data: [ { value: 130 // name: '1/min x 1000' } ], detail: { show: false }, animationEasing: "linear", animationEasingUpdate: "quadraticIn", //数据更新时的缓动效果 animationDurationUpdate: 1000, //数据更新动画的时长 animation: true //开启动画 }, { name: 'gauge 3', type: 'gauge', min: 0, max: 8, z: 10, splitNumber: 8, radius: '50%', axisLine: { lineStyle: { width: 12, color: [[1, '#34FFCA']] } }, splitLine: { show: false, }, axisTick: { show: false }, axisLabel: { show: false }, anchor: {}, pointer: { show: false }, title: { show: false }, detail: { show: false, offsetCenter: ['0', '70%'], color: '#FFF', fontSize: 18, formatter: '{value}.00' }, // value is speed data: [ { value: 130, } ], animationEasing: "linear", animationEasingUpdate: "quadraticIn", //数据更新时的缓动效果 animationDurationUpdate: 1000, //数据更新动画的时长 animation: true //开启动画 }, //右侧的仪表盘 { name: 'gauge 4', type: 'gauge', min: 0, max: 8, startAngle: 135, endAngle: -50, radius: '37%', center: ['79%', '55%'], //右侧表盘颜色 axisLine: { lineStyle: { color: [[1, '#34FFCA']], width: 12 } }, detail: { show: false }, splitLine: { show: false, length: 6 }, axisTick: { show: false }, axisLabel: { show: false }, anchor: {}, pointer: { show: true, width: 5, itemStyle: { color: '#fff' } }, data: [ { value: 6, name: '' } ], animationEasing: "linear", animationEasingUpdate: "quadraticIn", //数据更新时的缓动效果 animationDurationUpdate: 1000, //数据更新动画的时长 animation: true //开启动画 }, { name: 'gauge 5', type: 'gauge', min: 0, max: 8, splitNumber: 4, startAngle: 132, endAngle: -45, radius: '30%', center: ['79%', '55.3%'], axisLine: { lineStyle: { width: 0, color: [ [0.15, '#f00'], [1, 'rgba(255, 0, 0, 0)'] ] } }, axisLabel: { distance: 1, fontSize: 10, fontWeight: 400, fontFamily: 'Arial', color: '#fff', }, splitLine: { distance: 35, length: 12, lineStyle: { color: '#fff', width: 1 } }, animationEasing: "linear", animationEasingUpdate: "quadraticIn", //数据更新时的缓动效果 animationDurationUpdate: 1000, //数据更新动画的时长 animation: true //开启动画 }, ] }; //使用定时器setInterval循环刷新仪表盘的值 setInterval(() => { option.series[0].data[0].value = (Math.random() * 150).toFixed(2) - 0; //表盘1 option.series[1].data[0].value = (Math.random() * 180).toFixed(2) - 0; //表盘2 option.series[3].data[0].value = (Math.random() * 8).toFixed(2) - 0; //表盘3 myEchart.setOption(option, true); //每次刷新后重新显示图表 }, 500); } }, mounted() { //调用绘制图表的方法 this.draw_bar(); this.draw_gauge() } }</script><style scoped> #gauge { width: 8rem; height: 5.5rem; position: absolute; top: 2.55rem; left: 5.7rem; } #bar { width: 8rem; height: 2.2rem; position: relative; top: 2.8rem; left: 5.7rem; }</style>
本文链接地址:https://www.jiuchutong.com/zhishi/296152.html 转载请保留说明!

上一篇:vue2 sass 安装及使用(vuescan怎么安装)

下一篇:vue+element ui完成头像上传功能(文件转base64)以及自定义布局。(vue element ui)

  • 上海养老院口碑排名费用一个月多少

    上海养老院口碑排名费用一个月多少

  • 一个手机号可以有几个支付宝(一个手机号可以绑定几个快手账号)

    一个手机号可以有几个支付宝(一个手机号可以绑定几个快手账号)

  • 聚好看怎么取消自动续费?(聚好看怎么取消自动续费支付宝)

    聚好看怎么取消自动续费?(聚好看怎么取消自动续费支付宝)

  • 华为matebook可以连接光驱吗(华为matebook可以用手机充电器充电吗)

    华为matebook可以连接光驱吗(华为matebook可以用手机充电器充电吗)

  • 苹果相机怎么镜面翻转(苹果相机怎么镜像转换)

    苹果相机怎么镜面翻转(苹果相机怎么镜像转换)

  • qq收藏别人可以看见吗(qq收藏能被别人看见吗)

    qq收藏别人可以看见吗(qq收藏能被别人看见吗)

  • 微信读书属于阅文集团吗(微信读书是谁开发的)

    微信读书属于阅文集团吗(微信读书是谁开发的)

  • 1+8手机是什么牌子(1+8手机是哪个国家的)

    1+8手机是什么牌子(1+8手机是哪个国家的)

  • 人人视频是哪个公司旗下的(人人视频是哪个国家的软件)

    人人视频是哪个公司旗下的(人人视频是哪个国家的软件)

  • 华为nova7pro微信视频有美颜吗(华为nova7pro微信视频怎么开美颜)

    华为nova7pro微信视频有美颜吗(华为nova7pro微信视频怎么开美颜)

  • oppo padm00什么手机(oppo-pdbm00)

    oppo padm00什么手机(oppo-pdbm00)

  • ps怎么叠加图层(两张图片无缝合成一张的软件)

    ps怎么叠加图层(两张图片无缝合成一张的软件)

  • 魅族16s屏幕分辨率是多少(魅族16th屏幕分辨率可以更改吗?)

    魅族16s屏幕分辨率是多少(魅族16th屏幕分辨率可以更改吗?)

  • 微云在微信里怎么打开(微信微云怎么使用)

    微云在微信里怎么打开(微信微云怎么使用)

  • 华为jkmal00啥型号(华为jkmal00什么型号手机多少钱)

    华为jkmal00啥型号(华为jkmal00什么型号手机多少钱)

  • 淘宝精选怎么做推广(淘宝精选是怎么上的)

    淘宝精选怎么做推广(淘宝精选是怎么上的)

  • 苹果发语音没有声音怎么回事(苹果发语音没有声音只有噪音,语音视频没有问题)

    苹果发语音没有声音怎么回事(苹果发语音没有声音只有噪音,语音视频没有问题)

  • 什么是ftp主要的安全问题(ftp的主要功能)

    什么是ftp主要的安全问题(ftp的主要功能)

  • 小米手环4nfc版支持苹果吗(小米手环4nfc版怎么复制门禁卡)

    小米手环4nfc版支持苹果吗(小米手环4nfc版怎么复制门禁卡)

  • 华为evr一al00是什么型号(华为evr-an00是什么机型)

    华为evr一al00是什么型号(华为evr-an00是什么机型)

  • qq聊天为什么会有小耳朵(qq聊天为什么会有爱心)

    qq聊天为什么会有小耳朵(qq聊天为什么会有爱心)

  • 运营商设置更新关闭(运营商设置更新提醒怎么关闭)

    运营商设置更新关闭(运营商设置更新提醒怎么关闭)

  • 神州战神bios无法识别u盘的原因分析及解决方法图文教程(神州战神笔记本怎么进入不了bios)

    神州战神bios无法识别u盘的原因分析及解决方法图文教程(神州战神笔记本怎么进入不了bios)

  • 怎么激活Win11企业版?Win11企业版激活密钥分享 附激活工具(win11企业版激活)

    怎么激活Win11企业版?Win11企业版激活密钥分享 附激活工具(win11企业版激活)

  • Vue:element-ui中表格过长内容隐藏显示

    Vue:element-ui中表格过长内容隐藏显示

  • 月工资税基是什么
  • 清卡抄税报税顺序
  • 季度所得税申报表里的营业收入是什么?
  • 销户本金转入保单怎么办
  • 小规模没有计提增值税直接缴纳了
  • 货物运输代理服务
  • 应付票据现金流量现值计算公式
  • 费用利润率计算公式是什么意思
  • 报销发票会计怎么处理
  • 公司购买商业险多少钱
  • 当月取得的进项必须当月勾选吗
  • 会计累计折旧属于什么科目
  • 股权转让印花税税率
  • 房地产企业未出售的房子是否要交房产税
  • 发票没有存根联怎么办
  • 企业提取的盈余公积是什么会计科目
  • 融资租赁与经营租赁的相同点
  • 固定资产被政府查封
  • 企业自有固定资产有哪些
  • 入住酒店报销
  • 增值税普票当月开错了怎么办
  • 水利建设基金多交可以退么
  • 员工住院押金会计处理
  • 固定资产净值如何清零
  • 项目材料验收流程
  • windows7的笔记本有哪些
  • gif图片查看软件
  • 原材料退库怎么做凭证
  • 个人开发是什么意思
  • 天猫积分购物券怎么获得
  • 在禁用uac时无法激活什么原因
  • 压缩文件损坏怎么回事
  • 在php中使用什么获取文件的修改时间
  • 重装系统前需要注意什么
  • 驾校收入与成本的关系
  • win71
  • macos big sur操作
  • 企业注销后账上有结余怎么办
  • 预算会计的特点包括
  • 瑞芯微 8nm
  • 股权投资的收益回收方式
  • 如何通过无线路由器连接打印机
  • 向境外支付技术提成费需要提交什么材料
  • 员工报销的话费要缴纳个税吗?
  • 出售债券税费处理会计分录怎么写
  • php加密技术
  • yii2框架从入门到精通
  • 认缴制情况下 公司一定要出资到位再注销吗
  • 暂估的会计处理
  • python读取TXT文件代码
  • 长期待摊费用账务
  • 收据可以用来做账吗
  • 预付账款的适用范围
  • phpcms 标签
  • 试生产期间发生事故后重新
  • 高效刷题app
  • 织梦怎么建站
  • 残保金 滞纳金
  • 印花税购销合同包括哪些
  • 筹资活动产生的现金流量净额减少说明什么
  • 小规模纳税人技术维护费可以抵扣吗
  • 支付宝提现到对公账户要收手续费吗
  • 公司无流水要交税不
  • 销售方开具的红字专票购买方在税控盘要怎么操作
  • 物流公司会计工作内容
  • winxp系统安装教程
  • 怎样打开windows设置页面
  • executor进程
  • windows8怎么设置
  • linux ftp 服务
  • 有没有类似window的免费软件
  • win7如何查询电脑使用记录
  • jquery 插件写法
  • jquery瀑布流代码
  • js函数关键字
  • 税务局监察室主任职位说明书
  • 印花税怎么计提科目
  • 陕西地方水利建设基金减免政策2023
  • 国税怎么打印申报表
  • 没工作个人所得税
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设