| <html> |
| <head> |
| <meta charset="utf-8"> |
| <script src="../common/esl.js"></script> |
| <script src="../common/config.js"></script> |
| <link rel="stylesheet" href="../common/reset.css"> |
| </head> |
| <body> |
| <style> |
| .btn-group { |
| position: absolute; |
| z-index: 1; |
| right: 0; |
| top: 0; |
| } |
| .btn { |
| background-color: transparent; |
| border-color: transparent; |
| cursor: pointer; |
| color: #cccccc; |
| outline-width: 0; |
| } |
| </style> |
| <div id="main"></div> |
| <div class="btn-group"> |
| <button id="reset-btn" class="btn">Reset</button> |
| <button id="pause-btn" class="btn">Pause</button> |
| </div> |
| <script> |
| // 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: ''} |
| ]; |
| |
| define('chartInstance', function (require) { |
| var data = require('data/wealth-health.json'); |
| var echarts = require('echarts'); |
| require('common/dark'); |
| |
| var chart = echarts.init(document.getElementById('main'), 'dark'); |
| |
| 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; |
| }; |
| |
| var getOption = function(n) { |
| if (!data.timeline[n]) { |
| return; |
| } |
| return { |
| 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]); |
| }, |
| zlevel: 1 |
| } |
| } |
| }; |
| |
| var option = { |
| title: [{ |
| 'text': data.timeline[0], |
| textAlign: 'center', |
| x: '70%', |
| y: '55%', |
| textStyle: { |
| fontSize: 120, |
| color: 'rgba(255, 255, 255, 0.7)' |
| } |
| }, { |
| text: 'Weath and Health of Nations', |
| left: 'center' |
| }], |
| 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: { |
| x2: '15%' |
| }, |
| xAxis: { |
| type: 'log', |
| name: '人均收入/$', |
| max: 100000, |
| min: 300, |
| nameTextStyle: { |
| fontSize: 18 |
| }, |
| splitLine: { |
| show: false |
| }, |
| axisLabel: { |
| formatter: '{value}' |
| } |
| }, |
| yAxis: { |
| type: 'value', |
| name: '平均寿命/岁', |
| max: 100, |
| nameTextStyle: { |
| fontSize: 18 |
| }, |
| splitLine: { |
| show: false |
| } |
| }, |
| visualMap: [ |
| { |
| show: false, |
| dimension: 3, |
| categories: data.counties, |
| calculable: true, |
| precision: 0.1, |
| textGap: 30, |
| inRange: { |
| color: ['#bcd3bb', '#e88f70', '#edc1a5', '#9dc5c8', '#e1e8c8', '#7b7c68', '#e5b5b5', '#f0b489', '#928ea8', '#bda29a'] |
| } |
| } |
| ], |
| series: [ |
| { |
| type: 'scatter', |
| itemStyle: itemStyle, |
| data: data.series[0], |
| symbolSize: function(val) { |
| return sizeFunction(val[2]); |
| }, |
| zlevel: 1 |
| } |
| ] |
| }; |
| |
| |
| return { |
| init: function() { |
| chart.setOption(option); |
| var zr = chart.getZr(); |
| zr.configLayer(1, { |
| motionBlur: true, |
| lastFrameAlpha: 0.7 |
| }); |
| }, |
| go: function (n) { |
| var opt = getOption(n); |
| if (opt) { |
| chart.setOption(opt); |
| } |
| } |
| }; |
| }); |
| |
| require(['chartInstance', 'common/tock', 'data/wealth-health.json'], function (chartInstance, Tock, data) { |
| chartInstance.init(); |
| var i = 0; |
| var duration = 40 * 1000; |
| var interval = duration / data.timeline.length; |
| var timer = new Tock({ |
| countdown: true, |
| interval: interval, |
| callback: function () { |
| chartInstance.go((i++)); |
| }, |
| complete: function () { |
| } |
| }); |
| |
| document.getElementById('reset-btn').addEventListener('click', function (e) { |
| timer.reset(); |
| i = 0; |
| chartInstance.init(); |
| }); |
| |
| document.getElementById('pause-btn').addEventListener('click', function (e) { |
| i === 0 ? timer.start(duration) : timer.pause(); |
| }); |
| |
| }); |
| </script> |
| </body> |
| </html> |
| No newline at end of file |