私はd3 v4を使用しています。手動ズームでd3エラー
私は次のように領域グラフをズームしています:example私のズームは、このようなとして登録されている:
はfunction zoomed(){
t = d3.event.transform;
console.log(t);
...
}
自然ホイールでズーム、console
が吐き出す:
{
k:1.0097512975966858
x:-1.9210056265470996
y:-1.004383652458642
}
私は私のズーム方式は、このように見ていると
// Zoom Components
zoom = d3.zoom()
.scaleExtent([1, dayDiff*12])
.translateExtent([[0, 0], [width, height]])
.extent([[0, 0], [width, height]])
.on("zoom", zoomed);
私はTimeScale
を使用していて、ズームインして一定の時間に翻訳したいと思っています。たとえば、私はx1とx2として7日間を表示したいだけなので、kの倍率を計算してから、特定の領域に変換するtx値を計算します。 I は、手動ズームをトリガする手動ズーム方法を作成しました。次のコードで:
function manualZoom(){
var outerRightDay,
thirtyBeforeOuter,
k,
tx;
// Get outer right day
outerRightDay = moment(xScale.domain()[1]);
// Get 30 days before
thirtyBeforeOuter = moment(outerRightDay).subtract(31,'days');
// Get scale k
k = width/(xScale(outerRightDay) - xScale(thirtyBeforeOuter));
// Get transform value
svg.call(zoom.scaleBy, k);
tx = 0 - k * xScale(thirtyBeforeOuter);
svg.call(zoom.translateBy,tx);
}
これを実行した後、ズーム方法が吐き出す:
{
k:1.0097512975966858 //a good number
x:-1.9210056265470996 //a good number
y:NAN //this is an issue!!!!
}
それはタッチデバイス上で購入し、マウスホイールで動作します。私のy
はNAN
であり、タッチデバイスのズームインを停止します。 zoom.translateBy()
にそれを供給するためにty
をどうすれば計算できますか?
ここにはjsFiddleが含まれています。
あなたは作業フィドルを与えることができます.. – Cyril
はい私は一緒に1つを入れてみましょう。 @Cyril。 – inspired
。私はJsFiddleを追加しました – inspired