2016-09-14 41 views
0

私はariutta svg-pan-zoomライブラリを使用しています。私はviewBox="0 0 1052.3622 744.09448"width=649heigth=525,59のdivコンテナを持つSVGファイルを持っています。 SVG内でカーソル位置を取得しようとしています。ズーム後のカーソル位置svg-pan-zoom

マイコード:

var divX = ev.pageX - this.offsetLeft; 
var divY = ev.pageY - this.offsetTop; 

var currentPan = panZoom.getPan(); 
var realZoom = panZoom.getSizes().realZoom; 
var panZoomHeight = panZoom.getSizes().height; 
var viewboxHeight = panZoom.getSizes().viewBox.height; 

var x = (divX - currentPan.x)/realZoom; 
var y = ((panZoomHeight - divY - ((panZoomHeight-(viewboxHeight*realZoom))/2) + currentPan.y)/realZoom); 

var zoom = panZoom.getZoom(); // only to explain my problem - I'm not using this value 

zoomが1(デフォルトのズームレベル)になるまで、それは正常に動作します。ズームが1より大きい場合、yの値が正しくありません(xが良い)。例えば :

  1. zoom: 3.9562617313728334、カーソルが画面上の同じ位置のままである)私はいくつかの点でクリックし、結果はマウスホイールを使用してx: 197.82463543913713, y: 616.3652582594272
  2. ズームあります。
  3. もう一度クリックして、結果はx: 197.82463192575807, y: 540.7407139122004

は、私は、コードの多くの組み合わせをしようとしてきたが、何も良い働きません。私はこれをどうやって行うのか分かりません。私は明白な何かを欠いていますか カーソル位置を取得するためのより良い解決策はありますか?

+0

私は、原点は左上だと思うので、あなたが 'y'のためにした 'X'のために同じ計算を行う必要があります。 'x =(divY - currentPan.y)/ realZoom;のようなものです。 – bumbu

答えて

0

私はばかです!自分のコードの他の部分にバグがありました。だから、私はy値がzoom == 1で正しいと思ったのですが、実際はそうではありませんでした。

これが私の作品:

var y = (panZoomHeight - divY - (panZoomHeight-(viewboxHeight*realZoom)) + currentPan.y)/realZoom;  
関連する問題