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