0
私は一時停止し、私のアニメーションに再開の機能を追加しようとしています: D3.js:一時停止]ボタンが機能しない(アニメーションに使用するコールバック関数内)
それは黄色(列車の位置を示しています)を1行に表示します。私のデータは入れ子になっていて、キーは時間帯です。現在render(t)
の機能がすべてinterval
ミリ秒ごとに呼び出されています。 私はこれについてthis guideとthis questionを読んだことがありますが、私のケースにそれを適用する方法についてはまだ失われています。
私はアニメーションを一時停止し、列車の属性を検査してから再開したいと考えています。 ご協力いただければ幸いです!
currentTime = 0;
interval = 100;
var trainsHolder = svg.append('g')
function render(t){
trains = trainsHolder
.selectAll('circle')
.data(nested_train_data[t], function(d){ return d.car_id})
// enter
trains
.enter()
.append("circle")
.each(setAttributes)
// update
trains
.transition()
.duration(interval)
.each(setAttributes)
// exit
trains.exit().remove();
// update timer
timer_holder
.select("text")
.transition()
.duration(interval)
// .text("Time : " + String(t/60))
.text(String(nested_train_data[t][0].Date.getHours()) + ":" + String(nested_train_data[t][0].Date.getMinutes()))
};
render(currentTime);
var callback = function() {
return function() {
// my time increments are 60 seconds
currentTime = currentTime + 60;
// console.log(currentTime);
if (currentTime <= maxTime) {
render(currentTime);
d3.timer(callback(), interval);
}
return true;
}
}
d3.timer(callback(), interval);
// NOT WORKING
$("#pauseBtn").click(function() {
trainsHolder.selectAll('circle').transition().duration(0);
});
ありがとう!アニメーションは機能しますが、私はそれを一時停止できません。だから、私の理解はあなたがコールバック関数の内部関数を変更したことです(つまり経過しました)。しかし、2つの問題があります:1.どのように経過時間を取得する方法2.コールバックの内部関数を引数(d3.timer()...)で呼び出す方法? (私はあなたが見ることができるように初心者です!) – Pep
D3があなたにコールバックしたときに経過時間が自動的に渡されます(D3ドキュメントを参照)。内部関数は 'callback()'によって返されたもので、D3はそれをあなたのために呼び出します。 – akarve
おそらく、表示されていないが、ファイルがそこにあるので、おそらくsthを台無しにしてしまったのです。 – Pep