03 动画
3.pdf
2-数据可视化编程2023-基础-第二节.mp4
3-数据可视化编程2023-动画-第三节.mp4
!8-数据可视化编程2023-层次-第八节.mp4
动画概览
- 动画 D3.js的Transition模块:
- d3.transition与时长控制
- 动画的过度(Ease)
- 动画的同步
- 动画的继承
- 动画的插值
- 动画的循环
- 基于动画绘制动态散点图
- 数据的清洗与预处理
- 基于动画绘制追逐柱状图
- Tip:数字的格式化
- Tip:图元的起始状态
D3-transition
- 引用D3.js文档:‘Selection-like’ interface。
- D3的selections后调用transition,将后续的.attr(…)加以动画效果。
- selections.transition().duration(ms).attr(type, value)
- ms是毫秒,故1000表示动画持续1秒钟。
- e.g., d3.select(“#my_rect”).transition().duration(2000).attr(“width”, “400”);
- 即用两秒钟(2000毫秒)的时间把选择图元的宽变成400。
- 同d3.selections,支持链式调用
1 | d3.select(‘#my_rect’).transition().duration(1000).attr(…).attr(…).attr(…) |
只有transition()后面的.attr(…)会有动画效果。
1 | d3.select(‘#my_rect’).attr(…).transition().duration(1000).attr(…) |
第一个attr没有动画效果,第二个有动画效果
动画Demo d3动画特效针对svg标签
1 | <svg width="960" height="400" id="mainsvg" class="svgs" style='display: block; margin: 0 auto;'> |
动画的过渡
ease,动画过渡的方式。
通过链式调用的方式作用在transition对象后:
1 | d3.select("#my_rect").transition().duration(2000).ease(d3.easeLinear).attr(…) |
- D3提供多种Ease函数供选择:
- d3.easeCubic 默认,从加速到减速
- d3.easeLinear 线性
- d3.easeElastic 弹射
- d3.easeBounce 弹跳
- d3.easeExp 突变
动画的同步
通常,可视化作品都需要多个图元执行多个动画…
‘显式’定义Transition对象:
let transition = d3.transition().duration(ms)
并让其与多个图元共享,即所有绑定的图元会同步播放动画:
1 | rects.transition(transition).attr(…).attr(…) |
等待一个transition全部相关的图元执行完毕:await transition.end();
异步函数会不等待调用执行完直接进入下一条语句
await会强制等待异步函数执行完毕
JavaScript异步:
async:将函数转换成异步函数,即把返回值包装成一个Promise对象
await:等待异步函数执行结束
动画的继承
动画的插值
动画的循环
基本原则
基本原则