以下の最小限の例では、SVG要素が別の状態に移行し、元の状態に戻ります。元の属性をどのように除外して繰り返す必要はないでしょうか? selection.each()
およびtransition.each()
は予期せぬ混乱の結果をもたらしています。D3トランジションでの再利用のための属性の抽出
var circle = d3.select('svg').append('circle')
.attr('cx', 50) // this part should be factored out
.attr('cy', 130)
.attr('r', 25)
.attr('fill', 'blue');
circle.transition().duration(1000).delay(500)
.attr('cx', 200)
.attr('cy', 50)
.attr('r', 50)
.attr('fill', 'red')
.transition().duration(1000).delay(500)
.attr('cx', 50) // repeated
.attr('cy', 130)
.attr('r', 25)
.attr('fill', 'blue');
<!DOCTYPE html>
<script src="https://d3js.org/d3.v4.min.js"></script>
<svg width='300' height='170'>
</svg>
感謝。私は実際にオブジェクトに属性を格納し、 'selection.attrs'を呼び出すことで繰り返しを避けましたが、いくつかの行のコードを保存するためにアドオン全体を読み込むことは不満でした。私は、 '.each()'がこのようなものを意図していると確信していましたが、間違っている可能性があります。 – bongbang
さて、モジュールはちょうど1733バイト小さく、元のD3宇宙の一部です。私はコードをより鮮明に、より密でよりエレガントに見せるためにそれを含めました。もちろん、 '.attr()'メソッドの呼び出しだけでも同じことが達成できます。 – altocumulus
一方、 '.each()'はこれにはあなたの友人ではありません。 – altocumulus