私はズームとパンはx軸のために働いていますが、私はy軸用のパンを追加したいと思います。私は、y翻訳値を取得して、それを使用しますが、クリックドラッグは、y軸をパンしながら、また、ズームする(非直感的な方法で)y軸をパンして起こるズーム時に値の変更を翻訳しd3.behavior.zoom
とd3.event.translate[1]
を使用してみました。D3:1つの軸をズーム+パンし、もう一方のパンだけをパンすることはできますか?
x軸用とy軸用の2つのd3.behavior.zoom
インスタンスも使用しましたが、追加された最後のものだけがズームイベントで呼び出されます。ここで
は、私があまりにも(ただし、Yズーミング)パンのyを追加したいというのx方向のズームとパンのために動作例を示します。この中
var x = d3.scale.linear()
.domain([0, 800])
.range([0, 800]);
var y = d3.scale.linear()
.domain([0, 800])
.range([0, 800]);
var rectangleSelector = d3.select('svg')
.append('g')
.selectAll('rect')
.data([[0, 0], [50, 50], [100, 100]])
.enter()
.append('rect')
.attr('fill', 'black')
.attr('x', d => x(d[0]))
.attr('y', d => y(d[1]))
.attr('width', d => x(d[0] + 40) - x(d[0]))
.attr('height', d => y(40));
d3.select('svg')
.call(d3.behavior.zoom().x(x).on('zoom',() => {
rectangleSelector
.attr('x', d => x(d[0]))
.attr('y', d => y(d[1]))
.attr('width', d => x(d[0] + 40) - x(d[0]))
.attr('height', d => y(40));
}));
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>
<svg width="800" height="800"></svg>
たとえば私はd3.event.translate[1]
からyの値を使用しようとすると、それはドラッグのために動作しますが、望ましくない動作は、ユーザーのマウスもズームされている場所に依存してy軸に対して平行移動値を変更することです。
var x = d3.scale.linear()
.domain([0, 800])
.range([0, 800]);
var y = d3.scale.linear()
.domain([0, 800])
.range([0, 800]);
var rectangleSelector = d3.select('svg')
.append('g')
.selectAll('rect')
.data([[0, 0], [50, 50], [100, 100]])
.enter()
.append('rect')
.attr('fill', 'black')
.attr('x', d => x(d[0]))
.attr('y', d => y(d[1]))
.attr('width', d => x(d[0] + 40) - x(d[0]))
.attr('height', d => y(40));
d3.select('svg')
.call(d3.behavior.zoom().x(x).on('zoom',() => {
var translateY = d3.event.translate[1];
rectangleSelector
.attr('x', d => x(d[0]))
.attr('y', d => y(d[1] + translateY))
.attr('width', d => x(d[0] + 40) - x(d[0]))
.attr('height', d => y(40));
}));
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>
<svg width="800" height="800"></svg>
'd3.behavior.zoom()' ')(' X() ''とYとの連鎖可能です。私は 'x()'のみを指定しているので、ズームの振る舞いはx軸だけを変更します。しかし、私はその軸を変換するために使用したいy軸の値の変換を報告しています。パンニングだけでなくズーミングの影響を受けるという問題があります。 – Beau
私はJSFiddleも作成中です。 – Beau
多分これは:http://bl.ocks.org/jgbos/9752277 – altocumulus