:
// selector - d3 selector
function setupStringInterpolation(selector, duration, text){
selector
.transition()
.duration(duration)
.tween("string", function(){
var node = d3.select(this),
i = d3.interpolate(node.text(), text);
return function(t){
node.text(i(t));
}
});
}
このフィドルはそれのより多くの意味を確認する必要があります。
d3.interpolate(B)
任意の2つの値AとBとの間の補間を返します。 bは 数場合、interpolateNumberを使用...
:補間の実装は、以下のアルゴリズムを使用して、最終値bのタイプに基づいています。 ... bがの場合、日付がの場合は、interpolateDateを使用します。
特定の日に9時から9時20分の間のインターポレータが必要な場合は、引数として日付オブジェクトを渡す必要があります。テキストを日付オブジェクトに変換することができます。
ガイは、上記のそれに私を打つが、これは私はあなたのコードのために変更されたものです:
function setupStringInterpolation(selector, duration, text){
selector
.transition()
.duration(duration)
.tween("string", function(){
var node = d3.select(this);
var nodeText = node.text();
var format = d3.timeFormat("%M:%S");
startDate = new Date().setHours(nodeText.substr(0,2),nodeText.substr(3));
endDate = new Date().setHours(text.substr(0,2),text.substr(3));
var i = d3.interpolate(startDate,endDate);
return function(t){
node.text(format(i(t)));
}
});
}
var finalValue = "09:02";
setupStringInterpolation(d3.select("#timeSpot"), 1500, finalValue);
ここフィドル:https://jsfiddle.net/wwwykmk8/
微調整のjsfiddleは、より適切な開始日/終了日(同日)、およびフォーマッティングのためd3.formatオブジェクトを使用する:https://jsfiddle.net/rtq1xkmq/ – searlea
@searleaそれはより適切に見えます。ありがとう! – sparta93