|  |  | 
|  | <!-- | 
|  | 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="../dist/echarts.js"></script> | 
|  | <script src="lib/testHelper.js"></script> | 
|  | <script src="lib/facePrint.js"></script> | 
|  | <script src="lib/jquery.min.js"></script> | 
|  | <script src="lib/config.js"></script> | 
|  | <script src="lib/simpleRequire.js"></script> | 
|  | <link rel="stylesheet" href="lib/reset.css" /> | 
|  | </head> | 
|  | <body> | 
|  | <style> | 
|  | h1 { | 
|  | line-height: 60px; | 
|  | background: #360; | 
|  | text-align: center; | 
|  | font-weight: bold; | 
|  | color: #eee; | 
|  | font-size: 14px; | 
|  | margin: 0; | 
|  | } | 
|  | .chart { | 
|  | height: 400px; | 
|  | } | 
|  | .by-dispatch-action { | 
|  | padding: 5px; | 
|  | } | 
|  | </style> | 
|  |  | 
|  | <div id="main0"></div> | 
|  | <div id="main2"></div> | 
|  | <div id="main3"></div> | 
|  | <div id="main4"></div> | 
|  |  | 
|  |  | 
|  |  | 
|  | <script> | 
|  |  | 
|  | function makeButtons(ctx) { | 
|  |  | 
|  | function printStates() { | 
|  | var option = ctx.chart.getOption(); | 
|  | var dzs = option.dataZoom; | 
|  | var info = [{ | 
|  | type: dzs[0].type, | 
|  | start: dzs[0].start, | 
|  | end: dzs[0].end, | 
|  | startValue: dzs[0].startValue, | 
|  | endValue: dzs[0].endValue | 
|  | }, { | 
|  | type: dzs[1].type, | 
|  | start: dzs[1].start, | 
|  | end: dzs[1].end, | 
|  | startValue: dzs[1].startValue, | 
|  | endValue: dzs[1].endValue | 
|  | }] | 
|  | console.log('!!! ' + ctx.hint + ' !!!\n' + JSON.stringify(info, null, 2)); | 
|  | // alert( | 
|  | //     '!!! ' + ctx.hint + ' !!!\n' + JSON.stringify(info, null, 2) | 
|  | // ); | 
|  | } | 
|  |  | 
|  | function dispatchPercent(start, end) { | 
|  | ctx.chart.dispatchAction({ | 
|  | type: 'dataZoom', | 
|  | batch: [ | 
|  | {id: 'dz-in', start: start, end: end}, | 
|  | {id: 'dz-s', start: start, end: end} | 
|  | ] | 
|  | }); | 
|  | } | 
|  | function dispatchValue(startValue, endValue) { | 
|  | ctx.chart.dispatchAction({ | 
|  | type: 'dataZoom', | 
|  | batch: [ | 
|  | {id: 'dz-in', startValue: startValue, endValue: endValue}, | 
|  | {id: 'dz-s', startValue: startValue, endValue: endValue} | 
|  | ] | 
|  | }); | 
|  | } | 
|  |  | 
|  | var buttons = []; | 
|  |  | 
|  | echarts.util.each(ctx.percentButttons, function (item) { | 
|  | buttons.push({ | 
|  | text: item.text, | 
|  | onclick: function () { | 
|  | dispatchPercent(item.start, item.end); | 
|  | printStates(); | 
|  | } | 
|  | }) | 
|  | }); | 
|  | echarts.util.each(ctx.valueButtons, function (item) { | 
|  | buttons.push({ | 
|  | text: item.text, | 
|  | onclick: function () { | 
|  | dispatchValue(item.startValue, item.endValue); | 
|  | printStates(); | 
|  | } | 
|  | }) | 
|  | }); | 
|  |  | 
|  | return buttons; | 
|  | } | 
|  |  | 
|  | function getDefaultPercentButtons() { | 
|  | return [{ | 
|  | text: '{start: -5, end: 5} over min', | 
|  | start: -5, | 
|  | end: 5 | 
|  | }, { | 
|  | text: '{start: 95, end: 105} over max', | 
|  | start: 95, | 
|  | end: 105 | 
|  | }, { | 
|  | text: '{start: 40, end: 60}', | 
|  | start: 40, | 
|  | end: 60 | 
|  | }, { | 
|  | text: '{start: 40, end: 90} (over maxSpan)', | 
|  | start: 40, | 
|  | end: 90 | 
|  | }, { | 
|  | text: '{start: 40, end: 41} (over minSpan)', | 
|  | start: 40, | 
|  | end: 41 | 
|  | }]; | 
|  | } | 
|  | </script> | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  | <script> | 
|  |  | 
|  |  | 
|  | require(['./data/ec-star.json'], function (data) { | 
|  |  | 
|  | var minStartValue = '2013-06-06'; | 
|  | var maxEndValue = '2017-10-17'; | 
|  |  | 
|  | var currStartValue = '2017-01-01'; | 
|  | var currEndValue = maxEndValue; | 
|  |  | 
|  | var option = { | 
|  | animationDurationUpdate: 1000, | 
|  | tooltip: { | 
|  | trigger: 'axis' | 
|  | }, | 
|  | xAxis: [{ | 
|  | type: 'time', | 
|  | boundaryGap: false, | 
|  | axisLabel:{ | 
|  | textStyle:{ | 
|  | fontSize:14 | 
|  | } | 
|  | }, | 
|  | splitLine: { | 
|  | show: false, | 
|  | lineStyle:{ | 
|  | color:'#f7f7f7' | 
|  | } | 
|  | } | 
|  | }], | 
|  | yAxis: [{ | 
|  | type: 'value', | 
|  | name: 'Github Star', | 
|  | nameGap: 30, | 
|  | nameTextStyle: { | 
|  | fontSize: 20 | 
|  | }, | 
|  | axisLabel: { | 
|  | fontSize: 15 | 
|  | }, | 
|  | splitLine: { | 
|  | show: true, | 
|  | lineStyle:{ | 
|  | color:'#f7f7f7' | 
|  | } | 
|  | } | 
|  | }], | 
|  | grid: { | 
|  | top: 120, | 
|  | left: 30, | 
|  | right: 30, | 
|  | bottom: 50, | 
|  | containLabel: true | 
|  | }, | 
|  | dataZoom: [{ | 
|  | id: 'dz', | 
|  | type: 'inside', | 
|  | xAxisIndex: 0, | 
|  | startValue: currStartValue, | 
|  | endValue: currEndValue, | 
|  | minValueSpan: 3600 * 24 * 1000 * 10 | 
|  | }, { | 
|  | type: 'slider', | 
|  | xAxisIndex: 0, | 
|  | startValue: currStartValue, | 
|  | endValue: currEndValue, | 
|  | height: 20, | 
|  | handleIcon: 'M10.7,11.9v-1.3H9.3v1.3c-4.9,0.3-8.8,4.4-8.8,9.4c0,5,3.9,9.1,8.8,9.4v1.3h1.3v-1.3c4.9-0.3,8.8-4.4,8.8-9.4C19.5,16.3,15.6,12.2,10.7,11.9z M13.3,24.4H6.7V23h6.6V24.4z M13.3,19.6H6.7v-1.4h6.6V19.6z', | 
|  | handleSize: '90%', | 
|  | minSpanValue: 3600 * 24 * 1000 * 10 | 
|  | }], | 
|  | visualMap: { | 
|  | show: false, | 
|  | type: 'continuous', | 
|  | seriesIndex: 0, | 
|  | min: 0, | 
|  | max: 23000 | 
|  | }, | 
|  | series: [{ | 
|  | type: 'line', | 
|  | name: 'Star', | 
|  | lineStyle: { | 
|  | normal: { | 
|  | width: 4 | 
|  | } | 
|  | }, | 
|  | itemStyle: { | 
|  | normal: { | 
|  | borderColor: '#fff', | 
|  | borderWidth: 2 | 
|  | } | 
|  | }, | 
|  | showSymbol: false, | 
|  | symbol: 'circle', | 
|  | hoverAnimation: false, | 
|  | symbolSize: 15, | 
|  | sampling: 'average', | 
|  | // smooth: true, | 
|  | // symbol: 'none', | 
|  | data: data | 
|  | }] | 
|  | }; | 
|  |  | 
|  | var myChart = testHelper.create(echarts, 'main0', { | 
|  | option: option, | 
|  | height: 300, | 
|  | buttons: [{ | 
|  | text: 'Change Start Value', | 
|  | onclick: function (phase) { | 
|  | currStartValue = '2014-09-01'; | 
|  | myChart.dispatchAction({ | 
|  | type: 'dataZoom', | 
|  | id: 'dz', | 
|  | startValue: currStartValue | 
|  | }); | 
|  | } | 
|  | }, { | 
|  | text: 'Change End Value', | 
|  | onclick: function (phase) { | 
|  | currEndValue = '2017-02-05'; | 
|  | myChart.dispatchAction({ | 
|  | type: 'dataZoom', | 
|  | id: 'dz', | 
|  | endValue: currEndValue | 
|  | }); | 
|  | } | 
|  | }, { | 
|  | text: 'firstFocus', | 
|  | onclick: function (phase) { | 
|  | currStartValue = minStartValue; | 
|  | currEndValue = '2013-11-06'; | 
|  | myChart.dispatchAction({ | 
|  | type: 'dataZoom', | 
|  | id: 'dz', | 
|  | startValue: currStartValue, | 
|  | endValue: currEndValue | 
|  | }); | 
|  | } | 
|  | }] | 
|  | }); | 
|  | }); | 
|  |  | 
|  | </script> | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  | <script> | 
|  |  | 
|  | var option; | 
|  |  | 
|  | var base = +new Date(1990, 9, 3); | 
|  | var oneDay = 24 * 3600 * 1000; | 
|  | var startValue = Math.random() * 300; | 
|  | var data1 = []; | 
|  | var category = []; | 
|  | var specialNormal = []; | 
|  | var specialLong = []; | 
|  | var specialShort = []; | 
|  |  | 
|  | for (var i = 0; i < 100; i++) { | 
|  | var now = new Date(base += oneDay); | 
|  | var cat = [now.getFullYear(), now.getMonth() + 1, now.getDate()].join('-'); | 
|  | category.push(cat); | 
|  | value = Math.round((Math.random() - 0.5) * 20 + (!i ? startValue : data1[i - 1])); | 
|  | data1.push(value); | 
|  | if (i === 40) { | 
|  | specialNormal[0] = cat; | 
|  | specialLong[0] = cat; | 
|  | specialShort[0] = cat; | 
|  | } | 
|  | else if (i === 42) { | 
|  | specialShort[1] = cat; | 
|  | } | 
|  | else if (i === 55) { | 
|  | specialNormal[1] = cat; | 
|  | } | 
|  | else if (i === 85) { | 
|  | specialLong[1] = cat; | 
|  | } | 
|  | } | 
|  |  | 
|  | var option = { | 
|  | tooltip: { | 
|  | trigger: 'axis' | 
|  | }, | 
|  | toolbox: { | 
|  | feature: { | 
|  | dataZoom: { | 
|  | yAxisIndex: 'none' | 
|  | }, | 
|  | restore: {}, | 
|  | saveAsImage: {} | 
|  | } | 
|  | }, | 
|  | xAxis: [{ | 
|  | type: 'category', | 
|  | boundaryGap: false, | 
|  | data: category | 
|  | }], | 
|  | yAxis: [{ | 
|  | type: 'value', | 
|  | boundaryGap: [0, '100%'] | 
|  | }], | 
|  | dataZoom: [{ | 
|  | type: 'inside', | 
|  | id: 'dz-in', | 
|  | start: 0, | 
|  | end: 10, | 
|  | minSpan: 5, | 
|  | maxSpan: 30, | 
|  | xAxisIndex: 0 | 
|  | }, { | 
|  | id: 'dz-s', | 
|  | start: 0, | 
|  | end: 10, | 
|  | minSpan: 5, | 
|  | maxSpan: 30, | 
|  | xAxisIndex: 0 | 
|  | }], | 
|  | series: [{ | 
|  | type:'line', | 
|  | symbolSize: 10, | 
|  | data: data1 | 
|  | }] | 
|  | }; | 
|  |  | 
|  | function getBtnLabel(special, extra) { | 
|  | extra = extra || ''; | 
|  | return 'startValue: "' + special[0] + ', endValue: "' + special[1] + '" ' + extra; | 
|  | } | 
|  |  | 
|  | var ctx = { | 
|  | hint: 'category axis value should be integer', | 
|  | percentButttons: getDefaultPercentButtons(), | 
|  | valueButtons: [{ | 
|  | text: getBtnLabel(specialNormal), | 
|  | startValue: specialNormal[0], | 
|  | endValue: specialNormal[1] | 
|  | }, { | 
|  | text: getBtnLabel(specialLong, 'over maxSpan'), | 
|  | startValue: specialLong[0], | 
|  | endValue: specialLong[1] | 
|  | }, { | 
|  | text: getBtnLabel(specialShort, 'over minSpan'), | 
|  | startValue: specialShort[0], | 
|  | endValue: specialShort[1] | 
|  | }, { | 
|  | }] | 
|  | }; | 
|  | ctx.chart = testHelper.create(echarts, 'main2', { | 
|  | option: option, | 
|  | title: [ | 
|  | '(category axis) dispatchAction: {type: "dataZoom"}', | 
|  | 'range should not out of bound', | 
|  | 'minSpan: 5, maxSpan: 30' | 
|  | ], | 
|  | height: 200, | 
|  | buttons: makeButtons(ctx) | 
|  | }); | 
|  |  | 
|  | </script> | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  | <script> | 
|  |  | 
|  | var option; | 
|  |  | 
|  | var base = +new Date(1990, 9, 3); | 
|  | var oneDay = 24 * 3600 * 1000; | 
|  | var startValue = Math.random() * 300; | 
|  | var data2 = []; | 
|  | var specialNormal = []; | 
|  | var specialShort = []; | 
|  | var specialLong = []; | 
|  |  | 
|  | for (var i = 0; i < 100; i++) { | 
|  | var now = new Date(base += oneDay); | 
|  | value = Math.round((Math.random() - 0.5) * 20 + (!i ? startValue : data2[i - 1][1])); | 
|  | data2.push([now, value]); | 
|  | if (i === 30) { | 
|  | specialNormal[0] = +now; | 
|  | specialShort[0] = +now; | 
|  | specialLong[0] = +now; | 
|  | } | 
|  | else if (i === 32) { | 
|  | specialShort[1] = +now; | 
|  | } | 
|  | else if (i === 38) { | 
|  | specialNormal[1] = +now; | 
|  | } | 
|  | else if (i === 70) { | 
|  | specialLong[1] = +now; | 
|  | } | 
|  | } | 
|  |  | 
|  | var option = { | 
|  | tooltip: { | 
|  | trigger: 'axis', | 
|  | position: function (pt) { | 
|  | return [pt[0], '10%']; | 
|  | } | 
|  | }, | 
|  | toolbox: { | 
|  | feature: { | 
|  | dataZoom: { | 
|  | yAxisIndex: 'none' | 
|  | }, | 
|  | restore: {}, | 
|  | saveAsImage: {} | 
|  | } | 
|  | }, | 
|  | xAxis: [{ | 
|  | type: 'time' | 
|  | }], | 
|  | yAxis: [{ | 
|  | }], | 
|  | dataZoom: [{ | 
|  | type: 'inside', | 
|  | id: 'dz-in', | 
|  | maxSpan: 30, | 
|  | minSpan: 5, | 
|  | start: 0, | 
|  | end: 10 | 
|  | }, { | 
|  | id: 'dz-s', | 
|  | maxSpan: 30, | 
|  | minSpan: 5, | 
|  | start: 0, | 
|  | end: 10 | 
|  | }], | 
|  | series: [{ | 
|  | type:'line', | 
|  | symbolSize: 10, | 
|  | data: data2 | 
|  | }] | 
|  | }; | 
|  |  | 
|  | function fmt2Str(dt) { | 
|  | return echarts.format.formatTime('yyyy-MM-dd', +dt) | 
|  | } | 
|  | function getBtnLabel(special, extra) { | 
|  | extra = extra || ''; | 
|  | return 'startValue: "' + fmt2Str(special[0]) + '"(' | 
|  | + special[0] + '), endValue: "' + fmt2Str(special[1]) | 
|  | + '"(' + special[1] + ') ' + extra; | 
|  | } | 
|  |  | 
|  | var ctx = { | 
|  | hint: 'time axis value should be integer', | 
|  | percentButttons: getDefaultPercentButtons(), | 
|  | valueButtons: [{ | 
|  | text: getBtnLabel(specialNormal), | 
|  | startValue: fmt2Str(specialNormal[0]), | 
|  | endValue: fmt2Str(specialNormal[1]) | 
|  | }, { | 
|  | text: getBtnLabel(specialShort, 'over minSpan'), | 
|  | startValue: fmt2Str(specialShort[0]), | 
|  | endValue: fmt2Str(specialShort[1]) | 
|  | }, { | 
|  | text: getBtnLabel(specialLong, 'over maxSpan'), | 
|  | startValue: fmt2Str(specialLong[0]), | 
|  | endValue: fmt2Str(specialLong[1]) | 
|  | }] | 
|  | }; | 
|  | ctx.chart = testHelper.create(echarts, 'main3', { | 
|  | option: option, | 
|  | title: [ | 
|  | '(time axis) dispatchAction: {type: "dataZoom"}', | 
|  | 'range should not out of bound', | 
|  | 'maxSpan: 30, minSpan: 5', | 
|  | ], | 
|  | height: 200, | 
|  | buttons: makeButtons(ctx) | 
|  | }); | 
|  |  | 
|  | </script> | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  | <script> | 
|  |  | 
|  | var option; | 
|  |  | 
|  | var base = +new Date(1990, 9, 3); | 
|  | var oneDay = 24 * 3600 * 1000; | 
|  | var startValue = Math.random() * 300; | 
|  | var data1 = []; | 
|  | var category = [] | 
|  |  | 
|  | for (var i = 0; i < 1000; i++) { | 
|  | var now = new Date(base += oneDay); | 
|  | category.push([now.getFullYear(), now.getMonth() + 1, now.getDate()].join('-')); | 
|  | value = Math.round((Math.random() - 0.5) * 20 + (!i ? startValue : data1[i - 1])); | 
|  | data1.push(value); | 
|  | } | 
|  |  | 
|  | var option = { | 
|  | tooltip: { | 
|  | trigger: 'axis' | 
|  | }, | 
|  | toolbox: { | 
|  | feature: { | 
|  | dataZoom: { | 
|  | yAxisIndex: 'none' | 
|  | }, | 
|  | restore: {}, | 
|  | saveAsImage: {} | 
|  | } | 
|  | }, | 
|  | xAxis: [{ | 
|  | type: 'category', | 
|  | boundaryGap: false, | 
|  | data: category | 
|  | }], | 
|  | yAxis: [{ | 
|  | type: 'value', | 
|  | boundaryGap: [0, '100%'] | 
|  | }], | 
|  | dataZoom: [{ | 
|  | type: 'inside', | 
|  | id: 'dz-in', | 
|  | start: 0, | 
|  | end: 10, | 
|  | minValueSpan: 50, | 
|  | maxValueSpan: 300, | 
|  | xAxisIndex: 0 | 
|  | }, { | 
|  | id: 'dz-s', | 
|  | start: 0, | 
|  | end: 10, | 
|  | minValueSpan: 50, | 
|  | maxValueSpan: 300, | 
|  | xAxisIndex: 0 | 
|  | }], | 
|  | series: [{ | 
|  | type:'line', | 
|  | symbolSize: 10, | 
|  | data: data1 | 
|  | }] | 
|  | }; | 
|  |  | 
|  | var ctx = { | 
|  | hint: 'category axis value should be integer', | 
|  | percentButttons: getDefaultPercentButtons(), | 
|  | valueButtons: [{ | 
|  | text: 'startValue: 30, endValue: 500, over maxValueSpan', | 
|  | startValue: 30, | 
|  | endValue: 500 | 
|  | }, { | 
|  | text: 'startValue: 30, endValue: 32, over minValueSpan', | 
|  | startValue: 30, | 
|  | endValue: 32 | 
|  | }] | 
|  | }; | 
|  | ctx.chart = testHelper.create(echarts, 'main4', { | 
|  | title: [ | 
|  | '(category axis)', | 
|  | 'dispatchAction: {type: "dataZoom"}', | 
|  | 'range should not out of bound', | 
|  | 'minValueSpan: 50, maxValueSpan: 300' | 
|  | ], | 
|  | option: option, | 
|  | height: 200, | 
|  | buttons: makeButtons(ctx) | 
|  | }); | 
|  |  | 
|  | </script> | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  | </body> | 
|  | </html> |