2010-05-28 77 views
3

基本上我有一個svg「SecondSVG」成svg「MainSVG」。每個svg都有自己的ViewBox。此頁面可以通過另一個頁面加載到屏幕的任何位置。
因此,基本上我怎麼能找到「SecondSVG」viewBox的屏幕x知道這個svg基本上可以基於調用頁面的任何地方加載? event.clientX爲我自己提供了屏幕的x座標。如果我不知道「SecondSVG」的ViewBox座標,那麼我怎樣才能找到「SecondSVG」的ViewBox內的x座標?SVG - 從窗口座標到視圖框座標

我使用的是Firefox 3.6.3,我確實有一個事件對象,我可以從中提取clientX,clientY和其他相對於屏幕的座標。然而,我需要的是ViewBox中的座標。

+0

這很奇怪,事件應該給你座標局部的目標元素。在近期的Firefox中我已經取得了很好的成功。你能鏈接到一個說明這種行爲的頁面嗎? – jbeard4 2010-08-05 01:20:49

+0

我有同樣的問題。你有沒有設法解決這個問題? – 2011-03-01 16:22:30

+1

我沒有得到你,你是否試圖將屏幕座標(clientX,clientY)轉換爲SVG座標嗎? – Cipi 2011-04-12 13:52:42

回答

5
function click(evt) 
{ 

var root = document.getElementById('your svg'); 

     var uupos = root.createSVGPoint(); 

     uupos.x = evt.pageX; 

     uupos.y = evt.pageY; 

     var ctm = evt.target.getScreenCTM(); 

     if (ctm = ctm.inverse()) 

      uupos = uupos.matrixTransform(ctm); 



///the new x y are : uupos.x , uupos.y 
} 
+0

您應該使用'evt.clientX'和'evt.clientY',如果body標籤有餘量,則計算結果會出錯 – Hoffmann 2014-12-30 17:36:12

+1

相關:http://stackoverflow.com/a/20958980/500207 – 2016-05-23 16:24:16