私は、ユーザーがボタンをクリックして指定されたノードに移動できるようにするD3グラフを持っています。ボタンは次のようになります。D3 svg.transitionを低速から高速に設定する
<button type="button" class="btn btn-primary" ng-click="ctrl.panGraph(9)">Go to End</button>
このボタンは9上のIDで、最後のノードのx、y座標に、彼らはクリックの時点でSVGにどこからユーザーがかかりますクリックこの関数が呼び出される:上記の関数で
function panGraph (nodeId:any) {
svgWidth = parseInt(svg.style("width").replace(/px/, ""), 10);
svgHeight = parseInt(svg.style("height").replace(/px/, ""), 10);
for (var i = 0; i < renderedNodes.length; i++) {
if (nodeID === renderedNodes[i].id) {
ctrl.selectedNode = renderedNodes[i];
var translate = [svgWidth/2 - renderedNodes[i].x, svgHeight/2 - renderedNodes[i].y];
var scale = 1;
svg.transition().duration(4000).ease(d3.easeExpInOut).call(zoom.translate(translate).scale(scale).event);
}
}
}
私はで指定されたノードを中心に、そのx座標とy座標を使用して、一致するIDが見つかったら、私は、ページ上にレンダリングされたすべてのレンダリングされたノードを有しますsvgの真中。それはすべて正常に動作します。
グラフがボタンクリックで指定されたノードに変換されている間に、いくつかのアニメーションを使用しようとしています。ユーザーが指定されたノードに移動するボタンをクリックすると、トランジションが最初に遅く始まるようにトランジションをアニメートすることができます。スピードアップしますが、最後にもう一度スローダウンします。ノード?おかげ
UPDATE:
私にこのコンソールのエラーを与えるincluided "楽" で上記のコード:
ソリューションがでd3.easeExpInOut
と
ease
、または
d3.easePolyInOut.exponent(x)
を使用することです(いくつかのうち)
angular.js:13550 TypeError: Cannot read property 'indexOf' of undefined
at Object.d3.ease (d3.js:5844)
at Array.d3_transitionPrototype.ease (d3.js:8838)
at zoomOnNode (DiagramComponent.ts:1128)
at DiagramComponent.ts:1072
at Scope.$digest (angular.js:17073)
at Scope.$apply (angular.js:17337)
at HTMLButtonElement.<anonymous> (angular.js:25023)
at HTMLButtonElement.dispatch (jquery.js:4737)
at HTMLButtonElement.elemData.handle (jquery.js:4549)
これは正しい方法です。それはv4を使用している間、OPはv3を使用しているので、まだ洗練されている必要があります。また、v3のアプローチを追加して、将来の参照のためにこれを第2の部分として保存してください。 – altocumulus
Gerardoありがとう、それは私が必要とするものです。私は私のコードのsvg.transition行でそれを使用できますか?私は簡単にしようとしていることを反映するためにコードを更新しました。これは、より大きな角度成分の一部であるため、上記の関数内で容易にアクセスできる必要があります。私はコンソールエラーが発生しているようです "TypeError:私のボタンをクリックすると、プロパティ '未定義のindexOf'を読み取ることができません。私は今朝d3.easeについてもっと読んでいましたが、高速から低速へのアニメーションを設定したいのであれば、最良の選択肢は何ですか?私は、さまざまな状況に対して2つのオプションを提供したいと思います。 – bschmitty
問題を見つけたら、それをプランナーで把握してください。 altocumulusに+1します。私はd3 bowerバージョン3.5.17を使用しています。これは私が上記の私の記事で指摘した "undefined"エラーを引き起こします。私がプランナーでバージョン4に切り替えると、エラーは消えてしまい、正常に動作します。 v3の別のアプローチはありますか?また、v3で高速から低速に高速化する方法もありますか?ありがとうございます – bschmitty