2016-08-06 13 views
1

ズーニング中はすべての要素をトランジションしたいが、パンするときはトランジションを使いたい。D3 v4 - ズームだけでパン/ドラッグしないようにトランジションを追加する

オプション1:パンニング中にトランジションを中断したいが、ズーミング中はそのままにしておきたい。私は、以下を含む複数の方法でそうしようとしましたが、何も動作していません。

.call(vis.zoom) 
    .on("mousedown.zoom", function() { 
    d3.interrupt(this); <------------------ DOESN'T WORK 
    }); 

OPTION 2:また、私はズームボタンをクリックすると、遷移が唯一のSVGのすべての要素をその時点で追加された2番目のオプションを開いています。繰り返しますが、私は以下のようなものを試してみましたが、成功しませんでした。

function zoomIn() { 
    timeline.zoom.scaleBy(timeline.svg, 1.5); 
    timeline.svg.transition().duration(1000); <----- DOESN'T WORK 
    timeline.wrangleData(); 
} 

FULL例:https://jsfiddle.net/kre96sdy/2/

+0

?以前から変更されていない場合は、イベントがパニングされていると考えることができます。 –

+0

@JinyoungKim 'd3.event.transform.k'は視覚化の拡大に適用されるので、そのイベントへの移行のみを適用すべきですか?もしそうなら、それはどうやってできますか? – Keven

答えて

0

私はマイク・ボストックが追加リセットボタンの最近の追加の助けを借りて(OPTION 2を使用して)自分でそれを把握することができましたこの要旨:

https://bl.ocks.org/mbostock/db6b4335bf1662b413e7968910104f0f

function resetted() { 
    svg.transition() 
    .duration(750) 
    .call(zoom.transform, d3.zoomIdentity); 
} 

リセットボタンへのトランジションを追加したばかりなので、マウスでのズーム/パンは影響を受けません。

は、だから私の場合、私は以下でしたし、それは素晴らしい作品: `d3.event.transform.k`の使用についてどのように

function zoomIn() { 
    timeline.svg.transition() 
    .duration(750) 
    .call(timeline.zoom.scaleBy, 1.5) 
} 
関連する問題