|  |  | 
|  | <!-- | 
|  | Licensed to the Apache Software Foundation (ASF) under one | 
|  | or more contributor license agreements.  See the NOTICE file | 
|  | distributed with this work for additional information | 
|  | regarding copyright ownership.  The ASF licenses this file | 
|  | to you under the Apache License, Version 2.0 (the | 
|  | "License"); you may not use this file except in compliance | 
|  | with the License.  You may obtain a copy of the License at | 
|  |  | 
|  | http://www.apache.org/licenses/LICENSE-2.0 | 
|  |  | 
|  | Unless required by applicable law or agreed to in writing, | 
|  | software distributed under the License is distributed on an | 
|  | "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | 
|  | KIND, either express or implied.  See the License for the | 
|  | specific language governing permissions and limitations | 
|  | under the License. | 
|  | --> | 
|  |  | 
|  | <html> | 
|  | <head> | 
|  | <meta charset="utf-8"> | 
|  | <meta name="viewport" content="width=device-width, initial-scale=1" /> | 
|  | <script src="lib/simpleRequire.js"></script> | 
|  | <script src="lib/config.js"></script> | 
|  | <script src="lib/facePrint.js"></script> | 
|  | </head> | 
|  | <body> | 
|  | <style> | 
|  | html, body, #main { | 
|  | width: 100%; | 
|  | height: 100%; | 
|  | } | 
|  | </style> | 
|  | Check tooltip. | 
|  | <div id="info"></div> | 
|  | <div id="main"></div> | 
|  | <script> | 
|  |  | 
|  | /** | 
|  | * @see <https://en.wikipedia.org/wiki/Michelson%E2%80%93Morley_experiment> | 
|  | * @see <http://bl.ocks.org/mbostock/4061502> | 
|  | */ | 
|  | var chart; | 
|  | var data; | 
|  |  | 
|  | require([ | 
|  | 'echarts', | 
|  | 'data/security-sh-2013.json.js' | 
|  | ], function (echarts, rawData) { | 
|  |  | 
|  | chart = echarts.init(document.getElementById('main'), null, { | 
|  |  | 
|  | }); | 
|  | data = splitData(rawData); | 
|  |  | 
|  | update(); | 
|  |  | 
|  | chart.on('click', function (info) { | 
|  | console.log(info); | 
|  | if (info.data && info.data.length === 4) { | 
|  | alert([ | 
|  | 'clicked on: ', | 
|  | 'DATA: ' + info.name, | 
|  | 'OPEN: ' + info.data[0], | 
|  | 'CLOSE: ' + info.data[1], | 
|  | 'LOWEST: ' + info.data[2], | 
|  | 'HIGHEST: ' + info.data[3] | 
|  | ].join('\n')); | 
|  | } | 
|  | else if (info.data && info.data.length === 2) { | 
|  | // Markpoint | 
|  | alert('mark point'); | 
|  | } | 
|  | }); | 
|  | }) | 
|  |  | 
|  | function splitData(rawData) { | 
|  | var categoryData = []; | 
|  | var values = [] | 
|  | for (var i = 0; i < rawData.length; i++) { | 
|  | categoryData.push(rawData[i].splice(0, 1)[0]); | 
|  | values.push(rawData[i]) | 
|  | } | 
|  | return { | 
|  | categoryData: categoryData, | 
|  | values: values | 
|  | }; | 
|  | } | 
|  |  | 
|  | function parseDate(timestamp) { | 
|  | var date = new Date(timestamp); | 
|  | return date.getFullYear() + '-' + (date.getMonth() + 1) + '-' + date.getDate(); | 
|  | } | 
|  |  | 
|  | function update() { | 
|  |  | 
|  | chart.setOption({ | 
|  | legend: { | 
|  | data: ['上证指数', '开盘'] | 
|  | }, | 
|  | tooltip: { | 
|  | trigger: 'axis', | 
|  | axisPointer: { | 
|  | type: 'line' | 
|  | } | 
|  | }, | 
|  | grid: { | 
|  | left: '10%', | 
|  | right: '10%', | 
|  | bottom: '15%' | 
|  | }, | 
|  | xAxis: { | 
|  | type: 'category', | 
|  | data: data.categoryData, | 
|  | scale: true, | 
|  | boundaryGap : false, | 
|  | axisLine: {onZero: false}, | 
|  | splitLine: {show: false}, | 
|  | splitNumber: 20, | 
|  | min: 'dataMin', | 
|  | max: 'dataMax' | 
|  | }, | 
|  | yAxis: { | 
|  | scale: true, | 
|  | splitArea: { | 
|  | show: true | 
|  | } | 
|  | }, | 
|  | dataZoom: [ | 
|  | { | 
|  | type: 'inside', | 
|  | start: 50, | 
|  | end: 100 | 
|  | }, | 
|  | { | 
|  | show: true, | 
|  | type: 'slider', | 
|  | y: '90%', | 
|  | start: 50, | 
|  | end: 100 | 
|  | } | 
|  | ], | 
|  | series: [ | 
|  | { | 
|  | name: '开盘', | 
|  | type: 'line', | 
|  | data: (function () { | 
|  | opens = []; | 
|  | for (var i = 0, len = data.values.length; i < len; i++) { | 
|  | opens.push(data.values[i][0]); | 
|  | } | 
|  | return opens; | 
|  | })(), | 
|  | smooth: true, | 
|  | lineStyle: { | 
|  | normal: {color: '#aaa'} | 
|  | } | 
|  | }, | 
|  | { | 
|  | name: '上证指数', | 
|  | type: 'candlestick', | 
|  | data: data.values, | 
|  | // itemStyle: { | 
|  | //     borderColor: '#345', | 
|  | //     borderColor0: '#998', | 
|  | //     borderWidth: 2 | 
|  | // }, | 
|  | // encode: { | 
|  | //     tooltip: [0, 1, 2, 3] | 
|  | // }, | 
|  | // tooltip: { | 
|  | //     formatter: function (param) { | 
|  | //         var param = param[0]; | 
|  | //         return [ | 
|  | //             '日期:' + param.name + '<hr size=1 style="margin: 3px 0">', | 
|  | //             '开盘:' + param.data[0] + '<br/>', | 
|  | //             '收盘:' + param.data[1] + '<br/>', | 
|  | //             '日最低:' + param.data[2] + '<br/>', | 
|  | //             '日最高:' + param.data[3] + '<br/>' | 
|  | //         ].join('') | 
|  | //     } | 
|  | // }, | 
|  | markPoint: { | 
|  | data: [ | 
|  | { | 
|  | name: '某个坐标', | 
|  | coord: ['2013/5/21', 2300] | 
|  | }, | 
|  | { | 
|  | name: '某个屏幕坐标', | 
|  | x: 100, | 
|  | y: 200, | 
|  | label: { | 
|  | normal: { | 
|  | show: false | 
|  | }, | 
|  | emphasis: { | 
|  | show: true, | 
|  | position: 'top', | 
|  | formatter: 'zxcv' | 
|  | } | 
|  | } | 
|  | }, | 
|  | { | 
|  | name: 'max value (default)', | 
|  | type: 'max' | 
|  | }, | 
|  | { | 
|  | name: 'min value (default)', | 
|  | type: 'min' | 
|  | }, | 
|  | { | 
|  | name: 'max value (dim:close)', | 
|  | type: 'max', | 
|  | valueDim: 'close' | 
|  | }, | 
|  | { | 
|  | name: 'average value (dim:close)', | 
|  | type: 'average', | 
|  | valueDim: 'close' | 
|  | } | 
|  | ], | 
|  | tooltip: { | 
|  | formatter: function (param) { | 
|  | return param.name + '<br>' + (param.data.coord || ''); | 
|  | } | 
|  | } | 
|  | }, | 
|  | markLine: { | 
|  | data: [ | 
|  | [ | 
|  | {name: '两个坐标之间的标线', coord: ['2013/4/25', 2130]}, | 
|  | {coord: ['2013/5/27', 2220]} | 
|  | ], | 
|  | [ | 
|  | {name: '两个屏幕坐标之间的标线', x: 100, y: 100}, | 
|  | {x: 250, y: 130} | 
|  | ], | 
|  | [ | 
|  | {name: 'max - min', type: 'max'}, | 
|  | {type: 'min'} | 
|  | ], | 
|  | { | 
|  | name: 'min line', | 
|  | type: 'min' | 
|  | }, | 
|  | { | 
|  | name: 'max line on dim:open', | 
|  | type: 'max', | 
|  | valueDim: 'open' | 
|  | } | 
|  | ] | 
|  | } | 
|  | } | 
|  | ] | 
|  | }); | 
|  |  | 
|  | // setTimeout(function () { | 
|  | //     chart.setOption({ | 
|  | //         dataZoom: { | 
|  | //             startValue: '2013/1/28', | 
|  | //             endValue: '2013/1/30' | 
|  | //         } | 
|  | //     }); | 
|  | // }, 1000); | 
|  | } | 
|  |  | 
|  | </script> | 
|  | </body> | 
|  | </html> |