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の値に変更を加えた場合、ズーム操作のインスタンスが戻り値となる。 |