zoom.center - ズームの中心座標を取得、変更する

投稿日: / 更新日:

d3.jsのzoom.centerは、ズーム操作によってscaleやtranslateの値が計算される、その元となる中心の位置座標を取得したり、変更するためのメソッドです。値は第1要素がX座標、第2要素がY座標で構成される配列リテラルで指定します。初期値は、nullが設定されていて、その時のマウス(またはタッチ)の位置座標が中心座標となります。引数を指定しない場合は現在の設定を取得します。[ 0, 0 ]が要素の中心にあたり、例えば、150x150サイズの場合は、[ -75, -75 ]にすれば、左上を指定することになります。

サンプルコード

<div>
	<img src="/image.png">
</div>
// ズーム操作のインスタンスを作成
var zoom = d3.behavior.zoom() ;

// ズーム操作に対応するイベントリスナーを指定する
zoom.on( "zoom", function() {
	// 処理内容
} ) ;

// div要素に対して、call()メソッドでズーム操作を適用
d3.select( "div" ).call( zoom ) ;

// centerの値を取得
var center = zoom.center() ;

// centerの値を変更
zoom.center( [ 10, 50 ] ) ;

// centerの値を初期値に戻す
// これについては、どうも最初と挙動が違う印象を受ける (気のせいかも…)
zoom.center( [ null, null ] ) ;

デモ

center()の挙動を確認するには、マウスホイールでの操作が一番分かりやすいです。マウスを対象の画像から離れた場所に位置させて、ホイールで拡大、縮小してみて下さい。通常はマウスの位置が中心となり、拡大すれば画像が遠ざかり縮小すれば画像が近づきます。center()で中心座標を変更すると、マウスがどの位置にあっても、常にその位置が計算の中心となり、拡大すれば画像はその位置から遠ざかり、縮小すれば画像はその位置に近づきます。途中でドラッグ操作をしてしまうと、また計算が変わってきてしまうので、最初はホイール操作だけで挙動を確認してみて下さいね。この画像の横幅は150px、高さは152pxなので、[ -75, -76 ]を指定すれば、縮小した時にちょうど左上に向かいます。

構文

center || instance = zoom.center( [ center ] )

引数

項目説明
center省略可。省略した場合は値の変更ではなく、値の取得となる。引数に第1要素がX方向、第2要素がY方向の数値で構成される配列リテラルを指定すると、ズーム操作における、計算の元となる中心座標の値を変更する。[ 0, 0 ]が要素の左上ではなく、真ん中の位置にあたることに注意。

戻り値

項目説明
scale引数を指定しなかった場合、centerの値(配列)が戻り値となる。center()で明示的に値を指定していない場合、戻り値は配列ではなくundefinedになることに注意。
instance引数を指定して、centerの値に変更を加えた場合、ズーム操作のインスタンスが戻り値となる。