2017-06-11 6 views
1

の隅にグラフを移動:
私は、私は、コードのこの部分を編集したもの:
d3.behavior.zoomは()私はサンバーストにマウスホイールのズームを追加する代わりに、中央

var zoom = d3.behavior.zoom() 
    .scaleExtent([1, 10]) 
    .on("zoom", zoomed); 

var svg = d3.select("body").append("svg") 
    .attr("width", width) 
    .attr("height", height) 
    .append("g") 
    .attr("transform", "translate(" + width/2 + "," + height * .52 + ")") 
    .call(zoom); 

function zoomed() { 
    svg.attr('transform', 'translate(' + d3.event.transform.x + ',' + d3.event.transform.y + ') scale(' + d3.event.scale + ')'); 
    //svg.attr("transform", "translate(" + d3.event.translate + ")scale(" + d3.event.scale + ")"); 
} 

問題は、ページのロードのすべてがOKであると思われるときmouswheelをスクロールするために使用されている場合は、しかしサンバーストは、左上隅に終わるということです。
enter image description here

私はこのコードを変更することでこの問題を解決することができました:

function zoomed() { 
    svg.attr("transform", "translate(" + width/2 + "," + height * .52 + ")scale(" + d3.event.scale + ")"); 
} 

太陽の爆発は今のところ中にとどまりますが、これはカーソルの位置にズームされず、さらにズームアウトできなくなります。
サンバーストを左上隅に消さずに、カーソルの場所をズームする方法(最初のコード例のように)を教えてください。

JSfiddleを参照すると、ここでは機能しませんが、ローカルで実行すると機能します。

答えて

1

d3.event.translateは配列を返します。あなたはそれらの値(width/2height/2)を追加したい場合はこのように、あなたはそれらを個別に追加する必要があります。

function zoomed() { 
    svg.attr('transform', 'translate(' + (d3.event.translate[0] + width/2) + 
     ',' + (d3.event.translate[1] + height/2) + ') scale(' + d3.event.scale + ')'); 
} 

を別の方法として、あなたは、元のズーム機能を使用したい場合は...

function zoomed() { 
    svg.attr("transform", "translate(" + d3.event.translate + 
     ")scale(" + d3.event.scale + ")"); 
} 

私はZoとにおける標準d3.event.translateとd3.event.scaleを使用していた

var svg = d3.select("body").append("svg") 
    .attr("width", width) 
    .attr("height", height); 

var foo = svg.append("g") 
    .attr("transform", "translate(" + width/2 + "," + height * .52 + ")") 
    .call(zoom); 
+0

私はあなたが提供される一つで「ズーム」機能を交換してみました:私はこの例からアイデアを得た

.attr({viewBox: "" + (-width/2) + " " + (-height/2) + " " + width + " " + height}) 

:結局私は、SVGにビューボックスの属性を変更することによってそれを解決しましたまだできないのですか? – CodeNoob

+0

それは**別の**問題です。ここでは中心的な問題のみを取り上げています。問題ごとに1つの問題を残してください。 –

+0

私はこれを私の質問で取り上げました。「これはカーソルの位置にズームすることはなく、ユーザーはさらにズームアウトできません」分かりやすくするために最後の行に追加する必要があります。私はそれを編集します。あなたはまだあなたの答えでこの問題を解決することができますか? – CodeNoob

0

:...ちょうどグループの別の名前を割り当て、SVGの選択を破ります

最初にスクロールしたときに、全体のサンバーストが左上にジャンプした以外は、すべてうまくいきました。私はそれを真ん中に戻した後、それ自体を修正しましたが、それは迷惑でした。

私はこれと数時間苦労しました。しかし、さらにズームアウト、Basic Sunburst

関連する問題