<!doctype html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <title>Reveal.js</title>
        <link rel="stylesheet" href="./asset/md2reveal-0.1.7/css/reveal.css">
        <link rel="stylesheet" href="./asset/md2reveal-0.1.7/css/theme/black.css" id="theme">
        <link rel="stylesheet" href="./asset/md2reveal-0.1.7/css/theme/black-md2reveal.css" id="themeMine">
        <!-- For syntax highlighting -->
        <link rel="stylesheet" href="./asset/md2reveal-0.1.7/lib/css/zenburn.css">
    </head>
    <body>

        <div class="reveal">
            <div class="slides"><section  data-markdown><script type="text/template">
# Hand-On Training

### ECHARTS · 制作
</script></section><section  data-markdown><script type="text/template">
本文档在：
<a target="_blank" href="http://echarts.baidu.com/meeting/wuda/handon/resource.html">echarts.baidu.com/meeting/wuda/handon/resource.html</a>

![](./resource-QR.png)
</script></section><section  data-markdown><script type="text/template">
官网：<a target="_blank" href="http://echarts.baidu.com">echarts.baidu.com</a>

Gallery：<a target="_blank" href="http://gallery.echartsjs.com">gallery.echartsjs.com</a>

帮助文档：<a target="_blank" href="http://echarts.baidu.com/option.html">echarts.baidu.com/option.html</a>

表格工具：<a target="_blank" href="http://echarts.baidu.com/spreadsheet.html">echarts.baidu.com/spreadsheet.html</a>
</script></section><section  data-markdown><script type="text/template">
一份原始数据（奥运会各国奖牌数据）：
<a target="_blank" href="http://echarts.baidu.com/meeting/wuda/handon/medal.xlsx">echarts.baidu.com/meeting/wuda/handon/medal.xlsx</a>

整理过的数据（每年东道主的排名）
<a target="_blank" href="http://echarts.baidu.com/meeting/wuda/handon/hostRanksByYear.json">echarts.baidu.com/meeting/wuda/handon/hostRanksByYear.json</a>

namMap 数据
<a target="_blank" href="http://echarts.baidu.com/meeting/wuda/handon/nameMap.json">echarts.baidu.com/meeting/wuda/handon/nameMap.json</a>

一些颜色数据：
['#313695', '#4575b4', '#74add1', '#abd9e9', '#e0f3f8', '#ffffbf', '#fee090', '#fdae61', '#f46d43', '#d73027', '#a50026']
</script></section><section  data-markdown><script type="text/template">
### 其他

五分钟上手 echarts：
<a target="_blank" href="http://echarts.baidu.com/tutorial.html#5%20%E5%88%86%E9%92%9F%E4%B8%8A%E6%89%8B%20ECharts">echarts.baidu.com/tutorial.html</a>

JavaScript Array 方法速查手册：
<a target="_blank" href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array">developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array</a>
或：
<a target="_blank" href="http://www.w3school.com.cn/jsref/jsref_obj_array.asp">www.w3school.com.cn/jsref/jsref_obj_array.asp</a>


另：在 <a target="_blank" target="http://gallery.echartsjs.com">gallery</a> 上搜索『hand on』（注意有空格）
</script></section></div>
        </div>

        <script src="./asset/md2reveal-0.1.7/lib/js/head.min.js"></script>
        <script src="./asset/md2reveal-0.1.7/js/reveal.js"></script>
        <script src="./asset/md2reveal-0.1.7/js/md2reveal.js"></script>

        <script>
            function extend() {
              var target = {};
              for (var i = 0; i < arguments.length; i++) {
                var source = arguments[i];
                for (var key in source) {
                  if (source.hasOwnProperty(key)) {
                    target[key] = source[key];
                  }
                }
              }
              return target;
            }

            // Optional libraries used to extend on reveal.js
            var deps = [
              { src: './asset/md2reveal-0.1.7/lib/js/classList.js', condition: function() { return !document.body.classList; } },
              { src: './asset/md2reveal-0.1.7/plugin/markdown/marked.js', condition: function() { return !!document.querySelector('[data-markdown]'); } },
              { src: './asset/md2reveal-0.1.7/plugin/markdown/markdown.js', condition: function() { return !!document.querySelector('[data-markdown]'); } },
              { src: './asset/md2reveal-0.1.7/plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } },
              { src: './asset/md2reveal-0.1.7/plugin/notes/notes.js', async: true, condition: function() { return !!document.body.classList; } }
              // { src: './asset/md2reveal-0.1.7/plugin/math/math.js', async: true }
            ];

            // default options to init reveal.js
            var defaultOptions = {
              controls: true,
              progress: true,
              history: true,
              center: true,
              transition: 'default',
              dependencies: deps
            };

            // options from URL query string
            var queryOptions = Reveal.getQueryHash() || {};

            var options = {};
            options = extend(defaultOptions, options, queryOptions);
            Reveal.initialize(options);
        </script>
    </body>
</html>
