blob: 07be0141eea8a9164d3bbd85d9e39f5875b83bc3 [file] [log] [blame]
<!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>