d3js v5.9.2
使用d3建立动态图表主要使用到了d3.trasition
部分的API,经过他们能够完成动画
个人学习记录是经过一个例子了解这些APIhtml
仍是拿以前的例子,代码在此:完整的柱图 git
修改的代码部分在于建立rect处:github
//原来的代码 barContainer.append('rect') .attr('height', d => barScale(d)) .attr('width', barWidth - 1);
加上动画效果后代码以下api
barContainer.append('rect') .attr('height', 0) //动画开始前状态 .attr('width', barWidth - 1) .transition() //selection.transition() 返回transition .duration(1000)//持续时间 .ease(d3.easeBackInOut)//transition.ease(easing function),easing function是d3的动画函数,还有不少其余api .attr('height', d => barScale(d));//transition.attr()
??是从上向下绘制的
这里咱们能够用rect的y
属性控制动画,y
表示矩形左上角端点的纵坐标app
barContainer.append('rect') .attr('height', 0) .attr('width', barWidth - 1) .attr('y', d => barScale(d)) //y是相对rect父级的g容器的,顶端从底部开始,故值设为矩形的高 .transition() .duration(2000) .ease(d3.easeBackInOut) .attr('height', d => barScale(d)) .attr('y', 0);//到g容器顶部
因此过程就是矩形长度向下拉伸,同时位置上移
svg
这样子就完成了动画函数
上面的写法是最简单的写法,可是代码太长或者同一个动画效果屡次使用就会很冗杂,咱们可经过d3.transition()得到自定义的transition
使用也很简单学习
//定义transition let t = d3.transition() .duration(2000) .ease(d3.easeBackInOut); barContainer.append('rect') .attr('height', 0) .attr('width', barWidth - 1) .attr('y', d => barScale(d)) .transition(t) //使用新定义的transition .ease(d3.easeBackInOut) .attr('height', d => barScale(d)) .attr('y', 0);
效果相同动画
d3还提供了其余经常使用的API,除了用到的ease(),duration()还有delay()等等
代码在这(d3库在build里)ui