您现在的位置是:网站首页> 编程资料编程资料

echart实现大屏动效示例详解_JavaScript_

2023-05-24 311人已围观

简介 echart实现大屏动效示例详解_JavaScript_

1.通过dataZoom实现柱状图动态前移效果

最近做大屏相关需求,产品说需要炫酷一点的效果,于是做了一些echart相关的动效

设置dataZoom当前缩放值,加定时器,实现轮播效果。

示例:

option = { color: ['#1E90FF', '#FFA500'], tooltip: { trigger: 'axis', axisPointer: {} }, grid: { left: 20, right: 20, bottom: 0, containLabel: true }, legend: { data: [ { name: '负载电量', itemStyle: { color: '#FAAD14' } }, { name: '中央空调冷量', itemStyle: { color: '#01E6F5' } } ], textStyle: { color: '#fff' } }, dataZoom: { type: 'inside' }, xAxis: [ { type: 'category', axisLabel: { margin: 20, textStyle: { color: '#fff' } }, data: [ '11:00', '12:00', '13:00', '14:00', '15:00', '16:00', '17:00', '18:00', '19:00', '20:00', '21:00', '22:00', '23:00', '00:00', '01:00', '02:00', '03:00', '04:00', '05:00', '06:00', '07:00', '08:00', '09:00', '10:00' ], axisPointer: { type: 'shadow' } } ], yAxis: [ { type: 'value', name: 'kWh', nameTextStyle: { color: '#fff' }, splitLine: { show: true, lineStyle: { color: 'rgba(255, 255, 255, 0.2)' } }, axisLabel: { margin: 20, textStyle: { color: '#fff' } } }, { type: 'value', name: 'kWh', nameTextStyle: { color: '#fff' }, splitLine: { show: false, lineStyle: { color: 'rgba(255, 255, 255, 0.2)' } }, axisLabel: { margin: 20, textStyle: { color: '#d1e6eb' } } } ], series: [ { name: '负载电量', type: 'bar', yAxisIndex: 0, itemStyle: { color: { x: 0, y: 0, x2: 0, y2: 1, colorStops: [ { offset: 0, color: 'rgba(250,173,20, 1)' }, { offset: 0.5, color: 'rgba(250,173,20, 0.8)' }, { offset: 1, color: 'rgba(250,173,20,0.5)' } ] } }, tooltip: { valueFormatter(value) { if (typeof value === 'number') return value.toFixed(2) + 'kWh'; else return '-'; } }, data: [ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ] }, { name: '中央空调冷量', type: 'bar', yAxisIndex: 1, itemStyle: { color: { x: 0, y: 0, x2: 0, y2: 1, colorStops: [ { offset: 0, color: 'rgba(1,230,245, 1)' }, { offset: 0.5, color: 'rgba(1,230,245, 0.8)' }, { offset: 1, color: 'rgba(1,230,245,0.5)' } ] } }, tooltip: { valueFormatter(value) { if (typeof value === 'number') return value.toFixed(2) + 'kWh'; else return '-'; } }, data: [ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.10333333333333333, 0.0, 0.0, 0.0, 3.5133333333333336, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 6.2, 2.2733333333333334, 0.0 ] } ], func: (myChart, option) => { let start = 0, end = 7; option.dataZoom.startValue = option.xAxis[0].data[start]; // option.dataZoom.endValue = option.xAxis[0].data[end]; myChart.setOption(option); if (this.electInterval) { clearInterval(this.electInterval); } this.electInterval = setInterval(function () { option.dataZoom.startValue = option.xAxis[0].data[start]; option.dataZoom.endValue = option.xAxis[0].data[end]; myChart.setOption(option); start += 1; end += 1; if (end >= option.xAxis[0].data.length) { end = 7; start = 0; } }, 5000); }, }; option.func(myChart, option) 

2.叠加流光效果

多条曲线叠加,但注意,需要监听legendselectchanged事件,

option = { tooltip: { trigger: 'axis', show: true, }, grid: { left: 20, right: 20, bottom: 0, containLabel: true, }, dataZoom: { type: 'inside', }, legend: { textStyle: { color: '#fff', borderColor: '#fff' } }, func: (myChart, option) => { // 修复无图表数据切换bug if (option.series[0].data.length <= 0 && option.series[1].data.length <= 0) { return; } option.series[2].data = option.series[0].data; option.series[3].data = option.series[0].data; option.series[4].data = option.series[1].data; option.series[5].data = option.series[1].data; // setTimeout修复初始加载动效没生效bug setTimeout(() => { myChart.clear(); myChart.setOption(option); }, 100) if (this.loadInterval) { clearInterval(this.loadInterval); } this.loadInterval = setInterval(() => { myChart.clear(); myChart.setOption(option); }, 6000); myChart.on('legendselectchanged', function (params) { let selectArr = Object.values(params.selected); option.series[2].data = option.series[0].data; option.series[3].data = option.series[0].data; option.series[4].data = option.series[1].data; option.series[5].data = option.series[1].data; if (!selectArr[0]) { option.series[2].data = []; option.series[3].data = []; } if (!selectArr[1]) { option.series[4].data = []; option.series[5].data = []; } myChart.setOption(option); }); }, xAxis: [ { type: 'category', boundaryGap: true, axisLine: { show: true, lineStyle: { color: 'rgba(255, 255, 255, 0.2)' } }, axisLabel: { textStyle: { color: '#fff', margin: 15 } }, axisTick: { show: false }, data: ['10:55','11:00','11:05','11:10','11:15','11:20','11:25','11:30','11:35','11:40','11:45','11:50','11:55','12:00','12:05','12:10','12:15','12:20','12:25','12:30','12:35','12:40','12:45','12:50','12:55','13:00','13:05','13:10','13:15','13:20','13:25','13:30','13:35','13:40','13:45','13:50','13:55','14:00','14:05','14:10','14:15','14:20','14:25','14:30','14:35','14:40','14:45','14:50','14:55','15:00','15:05','15:10','15:15','15:20','15:25','15:30','15:35','15:40','15:45','15:50','15:55','16:00','16:05','16:10','16:15','16:20','16:25','16:30','16:35','16:40','16:45','16:50','16:55','17:00','17:05','17:10','17:15','17:20','17:25','17:30','17:35','17:40','17:45','17:50','17:55','18:00','18:05','18:10','18:15','18:20','18:25','18:30','18:35','18:40','18:45','18:50','18:55','19:00','19:05','19:10','19:15','19:20','19:25','19:30','19:35','19:40','19:45','19:50','19:55','20:00','20:05','20:10','20:15','20:20','20:25','20:30','20:35','20:40','20:45','20:50','20:55','21:00','21:05','21:10','21:15','21:20','21:25','21:30','21:35','21:40','21:45','21:50','21:55','22:00','22:05','22:10','22:15','22:20','22:25','22:30','22:35','22:40','22:45','22:50','22:55','23:00','23:05','23:10','23:15','23:20','23:25','23:30','23:35','23:40','23:45','23:50','23:55','00:00','00:05','00:10','00:15','00:20','00:25','00:30','00:35','00:40','00:45','00:50','00:55','01:00','01:05','01:10','01:15','01:20','01:25','01:30','01:35','01:40','01:45','01:50','01:55','02:00','02:05','02:10','02:15','02:20','02:25','02:30','02:35','02:40','02:45','02:50','02:55','03:00','03:05','03:10','03:15','03:20','03:25','03:30','03:35','03:40','03:45','03:50','03:55','04:00','04:05','04:10','04:15','04:20','04:25','04:30','04:35','04:40','04:45','04:50','04:55','05:00','05:05','05:10','05:15','05:20','05:25','05:30','05:35','05:40','05:45','05:50','05:55','06:00','06:05','06:10','06:15','06:20','06:25','06:30','06:35','06:40','06:45','06:50','06:55','07:00','07:05','07:10','07:15','07:20','07:25','07:30','07:35','07:40','07:45','07:50','07:55','08:00','08:05','08:10','08:15','08:20','08:25','08:30','08:35','08:40','08:45','08:50','08:55','09:00','09:05','09:10','09:15','09:20','09:25','09:30','09:35','09:40','09:45','09:50','09:55','10:00','10:05','10:10','10:15','10:20','10:25','10:30','10:35','10:40','10:45','10:50','10:55',] } ], yAxis: [ { type: 'value', name: 'kW', nameTextStyle: { color: '#fff' }, splitNumber: 7, splitLine: { show: true, lineStyle: { color: 'rgba(255, 255, 255, 0.2)' } }, axisLine: { show: false }, axisLabel: { margin: 20, textStyle: { color: '#d1e6eb' } }, axisTick: { show: false } }, { type: 'value', name: 'kW', splitNumber: 7, nameTextStyle: { color: '#fff' }, splitLine: { show: false, lineStyle: { color: 'rgba(255, 255, 255, 0.2)' } }, axisLine: { show: false }, axisLabel: { margin: 20, textStyle: { color: '#d1e6eb' } }, axisTick: { show: false } } ], series: [ { name: '电负荷', type: 'line', smooth: true, symbol: 'none', animation: false, areaStyle: { color: { x: 0, y: 0, x2: 0, y2: 1, colorStops: [ { offset: 0, color: 'rgba(250,173,20, 1)' }, { offset: 0.5, color: 'rgba(250,173,20, 0.8)' }, { offset: 1, color: 'rgba(250,173,20,0.5)' } ] } }, color: '#FAAD14', tooltip: { trigger: 'axis', show: true, valueFormatter(value) { if (typeof value === 'number') return value.toFixed(2) + 'kW'; else return '-'; }, }, data: [0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,] }, { name: '空调负荷', type: 'line', smooth: true, symbol: 'none', yAxisIndex: 1, animation: false, areaStyle: { color: { x: 0, y: 0, x2: 0, y2: 1, colorStops: [ { offset: 0, color: 'rgba(1,230,245, 1)' }, { offset: 0.5, color: 'rgba(1,230,245, 0.8)' }, { offset: 1, color: 'rgba(1,230,245,0.5)' } ] } }, color: '#01E6F5', tooltip: { trigger: 'axis', show: true, valueFormatter(value) { if (typeof value === 'number') return value.toFixed(2) + '
                
                

-六神源码网