3

トランジションが終了したら、オブジェクトに属性を付与したいと考えています。次のように画像の位置を更新するだけです。

tmp.transition().duration(1000)
                    .attr("transform", function(d) {return 'translate(' + 
                    coordinates[d].x +',' + 
                    coordinates[d].y + ')'})

終了したら、オブジェクト tmp に属性「moved」を値「no」で指定します。私は試した:

tmp.transition().duration(1000)
     .attr("transform", function(d) {return 'translate(' + 
            coordinates[d].x +',' + 
            coordinates[d].y + ')'}).end('moved', 'no')

しかし、成功せずに。任意のヒント?ありがとう、

4

3 に答える 3

5

ドキュメントによると、次を使用できます.each

tmp.transition().duration(1000)
 .attr("transform", function(d) {return 'translate(' + 
        coordinates[d].x +',' + 
        coordinates[d].y + ')'}
 ).each('end', function() {
     d3.select(this).attr('moved', 'no');
     // or maybe also this.setAttribute('moved', 'no');
 });
于 2012-06-18T01:52:16.070 に答える
0

window.setTimeoutを使用した後、一定期間待機してコードを実行するようにjavascriptに指示できます。同じミリ秒数を使用して、両方のイベントを同期する必要があります。

window.setTimeout(function(){
    //Your fake "callback" code here
}, 1000);
于 2012-06-18T00:43:08.017 に答える
0

@ user1066286 への対応として (コメントを投稿できないため): ここでは setTimout() を使用しないでください。悪い習慣であることは別として、タイムアウトが停止したときに遷移が実際に完了することを保証することはできません。

d3 移行ドキュメントから:

遷移には、次の 4 つのフェーズのライフ サイクルがあります。

移行は予定されています。移行が開始されます。トランジションが実行されます。移行が終了します。

これら 4 つのフェーズはそれぞれ非同期で処理されるため、移行に実際にかかる時間を知る方法はありません。ユーザー定義の期間よりも少し遅くなる可能性がありますが、少し速くなる可能性があります。

于 2015-03-26T10:54:22.117 に答える