配置项如下
// github: github.com/jackshawn/pics-by-echarts
var r = function(max) {
var m = max || 10;
return Math.floor(Math.random() * m);
};
var moonAndStars = {
type: 'graph',
data: (function() {
var moonPosition = {
x: r(150) + 25,
y: r(50)
}
var moon = [{
symbolSize: 80,
x: moonPosition.x,
y: moonPosition.y
}, {
symbolSize: 70,
x: moonPosition.x - 1.5,
y: moonPosition.y - 1.5,
itemStyle: {
normal: {
color: 'rgb(51, 51, 51)'
}
}
}, {
symbolSize: 0,
x: 0,
y: 0
}, {
symbolSize: 0,
x: 200,
y: 100
}];
var num = 60;
var stars = [];
for (var i = 0; i < num; i++) {
stars.push({
symbolSize: r(3),
x: r(200),
y: r(50)
})
}
return moon.concat(stars);
})(),
itemStyle: {
normal: {
color: '#ccc'
}
},
silent: true,
z: -1
};
var roofs = [
/*三角形*/
[1, 2, 3, 4, 5, 4, 3, 2, 1],
/*凸*/
[2, 2, 2, 4, 4, 4, 2, 2, 2],
[2, 2, 2, 4, 20, 4, 2, 2, 2],
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1],
[6, 6, 6, 6, 6, 5, 4, 3, 2, 1],
[0.3, 1, 1.6, 2.5, 3, 3.5, 3.6, 3.7, 3.7, 3.6, 3.5, 3, 2.5, 1.6, 1, 0.3],
[6, 6, 6, 6, 6, 2, 2, 2],
[6, 5.5, 5, 4.5, 4, 3.5, 3, 2.5, 2, 1.5],
[1, 1, 1, 1, 1, 1.5, 2, 2.5, 3, 3.5, 4],
[1, 1, 1, 1, 1, 1, 1],
[4, 4, 4, 2, 2, 2, 4, 4, 4]
];
var build = function(height) {
var arr = [100];
var l = 14;
var h = height || 50;
var addFloor = function(arr, l) {
var a = [];
for (var i = 0; i < arr.length; i++) {
a.push(arr[i] + l);
}
return a;
};
for (var i = 0; i < l; i++) {
var newRoof = addFloor(roofs[r(11)], r(h));
if (Math.random() < .5) {
newRoof.reverse()
}
arr = arr.concat(newRoof);
if (Math.random() < .5) {
arr.push(0)
}
}
return arr;
};
var building = build();
var building2 = (function() {
var b = build(100);
for (var i = 0; i < b.length; i++) {
if (b[i] > building[i]) {
b[i] = b[i] - building[i];
}
}
return b;
})()
option = {
stack: true,
xAxis: {
data: [],
silent: true,
splitLine: {
show: false
}
},
grid: {
left: 0,
right: 0,
bottom: 0,
top: 0
},
yAxis: {
silent: true,
splitLine: {
show: false
}
},
series: [
moonAndStars, {
type: 'bar',
data: building,
itemStyle: {
normal: {
color: 'rgb(38, 41, 57)'
}
},
animationDelay: function(idx) {
return idx * 10;
}
}, {
type: 'bar',
data: building2,
itemStyle: {
normal: {
color: 'rgb(28, 31, 47)'
}
},
animationDelay: function(idx) {
return idx * 10 + 300;
}
}, {
coordinateSystem: 'cartesian2d',
type: 'lines',
zlevel: -2,
effect: {
show: true,
period: 1,
trailLength: 0.05,
symbolSize: Math.random() * 2 + 1,
symbol: 'diamond',
loop: false
},
lineStyle: {
normal: {
color: '#ccc',
opacity: 0,
curveness: -0.05
}
},
data: [{
coords: [
[r(50) + 100, r(50) + 150],
[r(20) + 10, r(50) + 50]
]
}],
animationDelay: 1100
}
],
animationEasing: 'elasticOut',
animationDelayUpdate: function(idx) {
return idx * 5;
}
};
setInterval(function() {
option.series[3].effect.symbolSize = Math.random() * 2 + 1;
option.series[3].data.push({
coords: [
[r(50) + 100, r(50) + 150],
[r(20) + 10, r(50) + 50]
]
});
myChart.setOption(option);
}, 8000)