在d3
世界中,如果想使用起来不是透过事件驱动或是外部驱动,而是想要产生一连串有顺序的动画,就可以派得上用场。
透过间隔时间,可以让动画有一定的时间区间,设定动画整体完成时间。
范例
rootLayer
.append('circle')
.transition()
.duration(2000)
.attr('cx', 150)
.attr('cy', yScale(0))
.attr('r', 10)
从产生圆形到圆形放置指定位置,会经历两秒。
transition.on(事件, callback)
动画会产生四种事件。
我们可以针对start
, end
做事件开始以及结束的监听,像昨天的图表位移就是利用end
来达到每次结束反覆执行。
如果要产生无限回圈的动画,就可以透过start
, end
事件达到。
rootLayer
.append('circle')
.attr('cx', 150)
.attr('cy', yScale(0))
.attr('r', 10)
.transition()
.duration(2000)
.on('start', tickDown)
// 如果渐变开始,就呼叫tick Down
function tickDown() {
// 延续`this`的渐变事件,并且目标设定`cy`。
// 等待渐变完成之後,再次渐变开始并仍有`duration(2000)`属性。
// 开始新的渐变时,又会呼叫`tickUp`,并互相执行,就开始回圈了!
d3.active(this)
.attr('cy', yScale(1))
.transition()
.on("start", tickUp);
}
function tickUp() {
d3.active(this)
.attr('cy', yScale(0))
.transition()
.on("start", tickDown);
}
d3.active
会选取该Target(this)
上有的渐变事件,并且延续使用。
transition
有特点就是如果有duration
一定要等到执行完成,才会继续执行下一次transition
。
这也不是甚麽很厉害的方法,但我觉得透过这种方式,可以清楚的掌握动画各个状态,虽然很容易写出一大包有顺序关系的callback
,但d3
目前写下来,就是会发生类似jQuery
的问题,不过还是值得研究。
<<: Day27:Azure小白如何使用Azure Kubernetes Service部署Container应用程序
中秋节连假的最後一个早上,就用早餐吃到饱跟大家说声早安!! 8个月前,决定要分享我生活中很重要的部分...
前言 有了前 2 篇从「台湾证券交易所」取得 CSV 档後,接着要把资料存入 DB,在存入前,需要先...
Fake it till you make it(假装成功,直到你真的成功)。 - Emily i...
现在我们有一个可以输入日志的介面了,但日志就是每天都要写的意思,只有一篇怎麽够呢?我们来加上blog...
前言 在上一章节中,笔者讲解了一般使用者的资讯、储存密码还有群组等基本概念,本章节继续延伸上一章节的...