| <!doctype html> |
| <html lang="en"> |
| <head> |
| <meta charset="utf-8"> |
| <title>Reveal.js</title> |
| <base target="_blank"/> |
| <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"> |
| ### Animation |
| |
| </script></section><section ><section data-markdown><script type="text/template"> |
| #### just effects |
| |
| <div class="fragment" data-fragment-index="0">example: hover, select, ...</div> |
| |
| <div style="min-width: 1050px; text-align: center;"> |
| <div style="display:inline-block;"> |
| <div class="fragment" data-fragment-index="1"><iframe style="width:450px;height:400px;" data-md2r-src="./asset/ec-demo/ani-effect-hover.html"></iframe></div> |
| </div> |
| <div style="display:inline-block;"> |
| <div class="fragment" data-fragment-index="2"><iframe style="width:450px;height:400px;" data-md2r-src="./asset/ec-demo/ani-effect-hover.html?animation=false"></iframe></div> |
| </div> |
| </div> |
| </script></section><section data-markdown><script type="text/template"> |
| #### functional effects |
| |
| <div class="fragment" data-fragment-index="0">example: opening animation</div> |
| |
| <div class="fragment" data-fragment-index="1"><iframe style="width:1200px;height:500px;" data-md2r-src="./asset/ec-demo/ani-effect-delay.html"></iframe></div> |
| </script></section><section data-markdown><script type="text/template"> |
| #### functional effects |
| |
| <div class="fragment" data-fragment-index="0">example: stream</div> |
| |
| <div class="fragment" data-fragment-index="1"><iframe style="width:800px;height:500px;" data-md2r-src="./asset/ec-demo/fn-effect-lines.html"></iframe></div> |
| |
| </script></section><section data-markdown><script type="text/template"> |
| #### for transform |
| |
| <div style="min-width: 1050px; text-align: center;"> |
| <div style="display:inline-block;"> |
| <div class="fragment" data-fragment-index="0"><iframe style="width:450px;height:400px;" data-md2r-src="./asset/ec-demo/transform-timeline.html"></iframe></div> |
| </div> |
| <div style="display:inline-block;"> |
| <div class="fragment" data-fragment-index="1"><iframe style="width:450px;height:400px;" data-md2r-src="./asset/ec-demo/transform-timeline.html?animation=false"></iframe></div> |
| </div> |
| </div> |
| </script></section><section data-markdown><script type="text/template"> |
| #### for transform |
| |
| <div class="fragment" data-fragment-index="0">example: layout</div> |
| |
| <div style="min-width: 1050px; text-align: center;"> |
| <div style="display:inline-block;"> |
| <div class="fragment" data-fragment-index="0"><iframe style="width:450px;height:400px;" data-md2r-src="./asset/ec-demo/transform-graph.html"></iframe></div> |
| </div> |
| <div style="display:inline-block;"> |
| <div class="fragment" data-fragment-index="1"><iframe style="width:450px;height:400px;" data-md2r-src="./asset/ec-demo/transform-graph.html?animation=false"></iframe></div> |
| </div> |
| </div> |
| |
| </script></section><section data-markdown><script type="text/template"> |
| #### for transform |
| |
| <div class="fragment" data-fragment-index="0">example: data zoom</div> |
| |
| <div style="min-width: 1050px; text-align: center;"> |
| <div style="display:inline-block;"> |
| <div class="fragment" data-fragment-index="1"><iframe style="width:450px;height:400px;" data-md2r-src="./asset/ec-demo/transform-data-zoom.html"></iframe></div> |
| </div> |
| <div style="display:inline-block;"> |
| <div class="fragment" data-fragment-index="2"><iframe style="width:450px;height:400px;" data-md2r-src="./asset/ec-demo/transform-data-zoom.html?animation=false"></iframe></div> |
| </div> |
| </div> |
| </script></section><section data-markdown><script type="text/template"> |
| #### for transform |
| |
| <div class="fragment" data-fragment-index="0">example: roam</div> |
| |
| <div style="min-width: 1050px; text-align: center;"> |
| <div style="display:inline-block;"> |
| <div class="fragment" data-fragment-index="1"><iframe style="width:450px;height:400px;" data-md2r-src="./asset/ec-demo/transform-focus-geo.html"></iframe></div> |
| </div> |
| <div style="display:inline-block;"> |
| <div class="fragment" data-fragment-index="2"><iframe style="width:450px;height:400px;" data-md2r-src="./asset/ec-demo/transform-focus-geo.html?animation=false"></iframe></div> |
| </div> |
| </div> |
| </script></section></section><section ><section data-markdown><script type="text/template"> |
| Animation Requirements |
| |
| + Reduce complexity of programming. |
| + robustness |
| + development efficiency |
| + Performance. |
| </script></section><section data-markdown><script type="text/template"> |
| Animation Module |
| |
| + main loop, requestAnimationFrame |
| + frame, interpolation, easing |
| </script></section><section data-markdown><script type="text/template"> |
| Programming Requirements |
| |
| + <div class="fragment" data-fragment-index="0">Best practice => pattern</div> |
| + <div class="fragment" data-fragment-index="1">Pattern should be simple</div> |
| </script></section><section data-markdown><script type="text/template"> |
| <iframe style="width:900px;height:200px;" data-md2r-src="./asset/ec-demo/data-zoom2.html"></iframe> |
| |
| <div class="fragment" data-fragment-index="0">![](./asset/img2/ec3-workflow.png)</div> |
| |
| <aside class="notes" data-markdown>Creating shape each time is an easy way. |
| But, animation requires shape reuse.</aside></script></section><section data-markdown><script type="text/template"> |
| Programming Pattern: Data Diff |
| |
| ```js |
| |
| // diff: map by key. |
| data.diff(oldData) |
| .add(function (newIdx) { |
| // Create symbol |
| ... |
| // Store symbol on data. |
| data.setItemGraphicEl(newIdx, symbolEl); |
| }) |
| .update(function (newIdx, oldIdx) { |
| // Create or update symbol. |
| ... |
| // Store symbol on data. |
| data.setItemGraphicEl(newIdx, symbolEl); |
| }) |
| .remove(function (oldIdx) { |
| // Remove symbol. |
| }) |
| .execute(); |
| ``` |
| </script></section><section data-markdown><script type="text/template"> |
| ```js |
| option = { |
| animation: true, |
| animationDuration: ..., |
| animationEasing: ..., |
| animationDelay: ..., |
| ..., |
| |
| xxxx: [{ |
| animation: true, |
| animationDuration: ..., |
| animationEasing: ..., |
| animationDelay: ..., |
| ... |
| }, { |
| ... |
| }] |
| }; |
| ``` |
| </script></section><section data-markdown><script type="text/template"> |
| ```js |
| itemStyle: { |
| normal: { |
| color: ..., |
| ... |
| }, |
| emphasis: { |
| color: ..., |
| ... |
| } |
| } |
| ``` |
| </script></section><section data-markdown><script type="text/template"> |
| Programming Pattern: Unified API |
| |
| ```js |
| graphic.updateProps(symbolEl, { |
| // properties to be updated with or without animation. |
| position: point, |
| ... |
| }, seriesModel); |
| ``` |
| </script></section><section data-markdown><script type="text/template"> |
| Throttle |
| |
| ```js |
| fn = echarts.throttle(fn); |
| ``` |
| |
| |
| |
| |
| |
| |
| |
| |
| </script></section></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> |