echart实现大屏动效示例详解
短信预约 -IT技能 免费直播动态提醒
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) + '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,6.2,6.2,6.2,6.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,6.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,6.2,0.0,0.0,0.0,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,6.2,3.634,6.2,6.2,6.2,6.2,6.2,]
},
{
type: 'line',
smooth: true,
lineStyle: {
color: '#FFDF6F',
join: 'round',
shadowColor: '#FFDF6F',
shadowBlur: 6
},
tooltip: {
trigger: 'axis',
show: false
},
symbol: 'none',
animationDelay: 50,
animationDuration: 5000,
data: []
},
{
type: 'line',
smooth: true,
lineStyle: {
color: '#FAAD14'
},
tooltip: {
trigger: 'axis',
show: false
},
symbol: 'none',
animationDelay: 700,
animationDuration: 5000,
data: []
},
{
type: 'line',
smooth: true,
yAxisIndex: 1,
lineStyle: {
color: '#88F8FF',
join: 'round',
shadowColor: '#88F8FF',
shadowBlur: 6
},
tooltip: {
trigger: 'axis',
show: false
},
symbol: 'none',
animationDelay: 50,
animationDuration: 5000,
data: []
},
{
type: 'line',
smooth: true,
yAxisIndex: 1,
lineStyle: {
color: '#01E6F5'
},
tooltip: {
trigger: 'axis',
show: false
},
symbol: 'none',
animationDelay: 700,
animationDuration: 5000,
data: []
}
]
}
option.func(myChart, option)
3.柱状图光亮轮播
使用highlight, downplay
option = {
color: '#5470c6',
textStyle: {
color: 'rgba(255,255,255, 0.65)'
},
grid: {
containLabel: true,
show: false,
left: '0%',
top: '18%',
right: '3%',
bottom: '4%'
},
xAxis: {
type: 'category',
data: [
'01',
'02',
'03',
'04',
'05',
'06',
'07',
'08',
'09',
'10',
'11',
'12',
'13',
'14',
'15',
'16',
'17',
'18',
'19',
'20',
'21',
'22',
'23',
'24',
'25',
'26',
'27',
'28',
'29',
'30',
'31'
]
},
yAxis: {
type: 'value',
name: '电量 (kWh)',
nameTextStyle: {
padding: [0, 0, 0, 12]
},
axisLine: {
show: false
},
splitLine: {
show: true,
lineStyle: {
color: 'rgba(255,255,255,0.1)'
}
}
},
series: [
{
data: [
{ value: 60.0, name: '01', text: 60.0, showText: '100' },
{ value: 15.96, name: '02', text: 15.96, showText: '100' },
{ value: 34.95, name: '03', text: 34.95, showText: '100' },
{ value: 30.16, name: '04', text: 30.16, showText: '100' },
{ value: 44.36, name: '05', text: 44.36, showText: '100' },
{ value: 43.99, name: '06', text: 43.99, showText: '100' },
{ value: 34.62, name: '07', text: 34.62, showText: '100' },
{ value: 106.42, name: '08', text: 106.42, showText: '100' },
{ value: 101.34, name: '09', text: 101.34, showText: '100' },
{ value: 119.57, name: '10', text: 119.57, showText: '100' },
{ value: 107.8, name: '11', text: 107.8, showText: '100' },
{ value: 112.52, name: '12', text: 112.52, showText: '100' },
{ value: 116.99, name: '13', text: 116.99, showText: '100' },
{ value: 109.11, name: '14', text: 109.11, showText: '100' },
{ value: 86.08, name: '15', text: 86.08, showText: '100' },
{ value: 95.06, name: '16', text: 95.06, showText: '100' },
{ value: 91.39, name: '17', text: 91.39, showText: '100' },
{ value: 77.3, name: '18', text: 77.3, showText: '100' },
{ value: 88.7, name: '19', text: 88.7, showText: '100' },
{ value: 116.72, name: '20', text: 116.72, showText: '100' },
{ value: 105.08, name: '21', text: 105.08, showText: '100' },
{ value: 47.76, name: '22', text: 47.76, showText: '100' },
{ value: 0.0, name: '23', text: 0.0, showText: '100' },
{ value: 0.0, name: '24', text: 0.0, showText: '100' },
{ value: 0.0, name: '25', text: 0.0, showText: '100' },
{ value: 0.0, name: '26', text: 0.0, showText: '100' },
{ value: 0.0, name: '27', text: 0.0, showText: '100' },
{ value: 0.0, name: '28', text: 0.0, showText: '100' },
{ value: 0.0, name: '29', text: 0.0, showText: '100' },
{ value: 0.0, name: '30', text: 0.0, showText: '100' },
{ value: 0.0, name: '31', text: 0.0, showText: '100' }
],
type: 'bar',
smooth: true,
itemStyle: {
normal: {
color: function (params) {
const lastIndex = 21;
const commonColorOption = {
type: 'linear',
x: 0,
y: 0,
x2: 0,
y2: 1,
global: false // 缺省为 false
};
if (params.dataIndex === lastIndex) {
return Object.assign(commonColorOption, {
colorStops: [
{ offset: 0, color: '#FFB600' },
{ offset: 1, color: '#ffb60021' }
]
});
}
return Object.assign(commonColorOption, {
colorStops: [
{ offset: 0, color: '#01E6F5' },
{ offset: 1, color: '#1890ff24' }
]
});
},
barBorderRadius: [1, 1, 0, 0]
}
},
emphasis: {
itemStyle: {
shadowColor: '#fff',
shadowBlur: 10
}
}
}
],
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'shadow',
label: {
backgroundColor: '#6a7985'
}
},
formatter: function (datas) {
var res = datas[0].name + '<br/>';
res = res + '电量 (kWh):' + datas[0].data.text;
return res;
}
},
func: (myChart, option, isSame) => {
this.historyTimer && clearInterval(this.historyTimer);
const indexString = sessionStorage.getItem(
'monitor_screen_generation_history_index'
);
let index = isSame && indexString ? Number(indexString) : -1; //高亮所在下标
let dataLength = 22;
this.historyTimer = setInterval(() => {
index = (index + 1) % dataLength;
const newData = option.series[0].data.map((item, i) => {
let newItem;
if (index === i) {
const color = i === dataLength - 1 ? '#FAAD14' : '#01E6F5';
newItem = Object.assign(item, {
label: {
show: true,
position: 'top',
color: color,
fontSize: '12px',
formatter: (params) => {
return params.value[params.encode.x[0]];
}
}
});
} else {
newItem = Object.assign(item, { label: null });
}
return newItem;
});
if (index > dataLength) {
index = 0;
}
sessionStorage.setItem(
'monitor_screen_generation_history_index',
JSON.stringify(index)
);
option.series[0].data = newData;
myChart.setOption(option);
myChart.dispatchAction({
type: 'downplay',
seriesIndex: new Array(index + 1).fill(1).map((v, i) => i)
});
myChart.dispatchAction({
type: 'highlight',
seriesIndex: 0,
dataIndex: index
});
}, 2000);
}
};
option.func(myChart, option)
以上就是echart实现大屏动效示例详解的详细内容,更多关于echart大屏动效的资料请关注编程网其它相关文章!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341