私は人気のある d3 ライブラリの V3 を使用しており、基本的に 3 つのトランジションが必要です。最初のトランジションは終了選択に適用され、2 番目は更新選択に適用され、3 番目は開始選択に適用されます。選択の 1 つが空の場合、それぞれのトランジションがスキップされるようにチェーンする必要があります。つまり、終了選択がない場合、更新選択はすぐに開始する必要があります。delay
これまでのところ、(関数を使用して)このコードを思いつきました。
// DATA JOIN
var items = d3.select('#data').selectAll('.item');
items = items.data(data, function(d){
return d.twitter_screenname;
});
// EXIT
items.exit().transition().duration(TRANSITION_DURATION).style('opacity', 0).remove();
// UPDATE
// Divs bewegen
items.transition().duration(TRANSITION_DURATION).delay(TRANSITION_DURATION * 1)
.style('left', function(d, i) {
return positions[i].left + "px";
}).style('top', function(d, i) {
return positions[i].top + "px";
});
// ENTER
// Divs hinzufügen
var div = items.enter().append('div')
.attr('class', 'item')
.style('left', function(d, i) {
return positions[i].left + "px";
}).style('top', function(d, i) {
return positions[i].top + "px";
});
div.style('opacity', 0)
.transition().duration(TRANSITION_DURATION).delay(TRANSITION_DURATION * 2)
.style('opacity', 1);
まず第一に、トランジションを「スキップ」することはできません。第二に、より良い方法があると思いますdelay
。http://bl.ocks.org/mbostock/3903818を見ましたが、何が起こっているのかよくわかりませんでした。
また、SVG 要素ではなくitems.exit().transition().duration(TRANSITION_DURATION).remove()
s .items
div