2010-02-13 21 views
5

如何在Opera中給SVG中的元素定位座標?通過座標在Opera中找到SVG中的元素

elementFromPoint(x,y)在Firefox中正常工作,但Opera似乎失敗了,總是返回整個SVG而不是特定的元素。

有人可能會問爲什麼我需要它。那麼,僅僅是因爲我想突出顯示光標下的SVG元素,並且因爲在光標下的元素被添加/刪除時Opera沒有觸發任何事件,所以在您使用鼠標移動之前。 也就是說,當我添加一個新元素時,在我稍微移動鼠標之前,它不會高​​亮顯示,這看起來不太好。

乾杯, 米哈伊爾。

回答

5

在Opera中有SVG1.1的SVGSVGElement.getIntersectionList

var element= document.elementFromPoint(pageX, pageY); 
if (element.localName.toLowerCase()=='svg' && 'getIntersectionList' in element) { 
    var svgxy= Element_getPageXY(svg); // by the usual offsetLeft/offsetParent etc. method 
    var rect= svg.createSVGRect(); 
    rect.x= pageX-svgxy[0]; 
    rect.y= pageY-svgxy[1]; 
    rect.width=rect.height= 1; 
    var hits= svg.getIntersectionList(rect, null); 
    if (hits.length>0) 
     element= hits[hits.length-1]; 
} 

[未經測試的代碼,甚至可能會奏效。]

+1

工作正常,非常感謝! 'svg'變量實際上是'元素'之一。 對於getPageXY,我使用了http://www.quirksmode.org/js/findpos.html中的腳本,是任何人的興趣。 – Qnan

0

辦法做你想要什麼,而不需要去尋找自己的光標是體現在this example下的元素。基本上,您將mouseover事件的事件處理程序綁定到根文檔元素,然後檢查事件的目標以找出實際接收事件的元素。

對於產品代碼,您應該添加邏輯來處理元素爲<use>引用(通過使用target.correspondingUseElement來查找id)的情況。

相關問題