slides/arch-brief/asset/ec-demo/reuse-axis-timeline.html (206 lines of code) (raw):

<html> <head> <meta charset="utf-8"> <script src="../common/echarts.min.js"></script> <script src="../common/jquery.min.js"></script> <script src="../data/life-expectancy.js"></script> <link rel="stylesheet" href="../common/reset.css"> </head> <body> <style> </style> <div id="main"></div> <script> var myChart = echarts.init(document.getElementById('main')); var data = window.rawData; var itemStyle = { normal: { opacity: 0.8, shadowBlur: 10, shadowOffsetX: 0, shadowOffsetY: 0, shadowColor: 'rgba(0, 0, 0, 0.5)' } }; var sizeFunction = function (x) { var y = Math.sqrt(x / 5e8) + 0.1; return y * 40; }; // Schema: var schema = [ {name: 'Income', index: 0, text: '人均收入', unit: '美元'}, {name: 'LifeExpectancy', index: 1, text: '人均寿命', unit: '岁'}, {name: 'Population', index: 2, text: '总人口', unit: ''}, {name: 'Country', index: 3, text: '国家', unit: ''} ]; option = { baseOption: { timeline: { axisType: 'category', orient: 'vertical', autoPlay: true, inverse: true, playInterval: 1000, left: null, right: 0, top: 20, bottom: 20, width: 55, height: null, label: { normal: { textStyle: { color: '#999' } }, emphasis: { textStyle: { color: '#fff' } } }, symbol: 'none', lineStyle: { color: '#555' }, checkpointStyle: { color: '#bbb', borderColor: '#777', borderWidth: 2 }, controlStyle: { showNextBtn: false, showPrevBtn: false, normal: { color: '#666', borderColor: '#666' }, emphasis: { color: '#aaa', borderColor: '#aaa' } }, data: [] }, backgroundColor: '#404a59', title: [{ 'text': data.timeline[0], right: 70, top: 10, textStyle: { fontSize: 44, color: 'rgba(255, 255, 255, 0.7)' } }], tooltip: { padding: 5, backgroundColor: '#222', borderColor: '#777', borderWidth: 1, formatter: function (obj) { var value = obj.value; return schema[3].text + ':' + value[3] + '<br>' + schema[1].text + ':' + value[1] + schema[1].unit + '<br>' + schema[0].text + ':' + value[0] + schema[0].unit + '<br>' + schema[2].text + ':' + value[2] + '<br>'; } }, grid: { left: '15%', right: '110' }, xAxis: { type: 'log', name: '人均收入', max: 100000, min: 300, nameGap: 25, nameLocation: 'middle', splitLine: { show: false }, axisLine: { lineStyle: { color: '#ccc' } }, axisLabel: { formatter: '{value} $' } }, yAxis: { type: 'value', name: '平均寿命', max: 100, nameTextStyle: { color: '#ccc', fontSize: 12 }, axisLine: { lineStyle: { color: '#ccc' } }, splitLine: { show: false }, axisLabel: { formatter: '{value} 岁' } }, visualMap: [ { show: false, dimension: 3, categories: data.counties, calculable: true, precision: 0.1, textGap: 30, textStyle: { color: '#ccc' }, inRange: { color: (function () { var colors = ['#bcd3bb', '#e88f70', '#edc1a5', '#9dc5c8', '#e1e8c8', '#7b7c68', '#e5b5b5', '#f0b489', '#928ea8', '#bda29a']; return colors.concat(colors); })() } } ], series: [ { type: 'scatter', itemStyle: itemStyle, data: data.series[0], symbolSize: function(val) { return sizeFunction(val[2]); } } ], animationDurationUpdate: 1000, animationEasingUpdate: 'quinticInOut' }, options: [] }; for (var n = 0; n < data.timeline.length; n++) { option.baseOption.timeline.data.push(data.timeline[n]); option.options.push({ title: { show: true, 'text': data.timeline[n] + '' }, series: { name: data.timeline[n], type: 'scatter', itemStyle: itemStyle, data: data.series[n], symbolSize: function(val) { return sizeFunction(val[2]); } } }); } myChart.setOption(option); </script> </body> </html>