3

d3.js 内で中断された遷移が終了イベントをトリガーしないという事実を処理する方法を考えていました。APIドキュメントが言うように

トランジションが、特定の要素で後でスケジュールされたトランジションに取って代わられる場合、その要素の終了イベントは送出されないことに注意してください。中断された遷移は、終了イベントをトリガーしません。から: https://github.com/mbostock/d3/wiki/Transitions#control

私の場合、遷移はユーザーの操作によってトリガーされます。これらのトランジションは、ユーザーがマウス クリックによって新しいトランジションをトリガーすると、中断される可能性があります。最初のトランジションで、要素がフェードアウトし、トランジションの最後に削除されることを意図していたとしましょう。この遷移が中断された場合、要素は削除されません。トランジションが発生している間、それ以上のユーザー操作を禁止することはできますが、それは本当に私が望むものではありません (特に、ユーザーが私の svg グラフの前の状態をクリックできるようにする前後のボタンがあるため...) 基本的に私は「中断イベント」が必要

ありがとう

マーティン

4

1 に答える 1

1

これを行うには本当に満足のいく方法はないと思います。少し面倒な回避策は、現在行われている遷移の数を数え、そこから推論することです。

したがって、初期化します。

var transitionCount = 0;

そして、新しいトランジションをスケジュールするときはいつでも:

if ( transitionCount != 0 ) {
    // handle interrupted transitions here somehow
    transitionCount = 0;
}
var myTransition = selection.transition().... ; 
transitionCount += myTransition.size();
myTransition.each('end', function() { transitionCount --; });

このように中断されたトランジションを手動でクリーンアップできる場合は、これで問題ありません。「開始」イベントを使用してカウンタをインクリメントできないことに注意してください。トランジションをスケジュールしてから開始するまでに遅延があるため、そこで競合状態が発生します。

于 2014-11-10T10:24:59.167 に答える