2012-05-23 168 views
0

我想檢測移動時鼠標在持有者div中的位置。但是,當我將mose移動到持有者div內的SVG元素上時,它將相對於此元素而不是持有者div。任何人都知道我如何能夠防止這種情況?下面看到我使用的代碼:您應該使用event.currentTarget,而不是event.target鼠標移動時div的鼠標移動改變鼠標移動時的元素

var R = Raphael("holder", canw, canh); 

$('#holder').mousemove(function (event){ 
    if(mousemove){ 
     position = getPosition(event); 
     console.log(position.x+" - "+position.y); 
    } 
    }); 

function getPosition(e) { 
    //this section is from http://www.quirksmode.org/js/events_properties.html 
    console.log(e); 
    var targ; 
    if (!e) 
     e = window.event; 
    if (e.target) 
     targ = e.target; 
    else if (e.srcElement) 
     targ = e.srcElement; 
    if (targ.nodeType == 3) // defeat Safari bug 
     targ = targ.parentNode; 
    console.log(targ); 
    // jQuery normalizes the pageX and pageY 
    // pageX,Y are the mouse positions relative to the document 
    // offset() returns the position of the element relative to the document 
    var x = e.pageX - $(targ).offset().left; 
    var y = e.pageY - $(targ).offset().top; 
    return {"x": x, "y": y}; 
}; 

<div id="holder"></div> 

回答

2

- 這會給你你連接聽者,而不是收到事件的元素的元素。所以你的位置將相對於#holder元素進行計算。

由於您使用jQuery,這也應該在Internet Explorer中工作(jQuery顯然emulates event.currentTarget there)。其他IE兼容性hack(window.eventevent.srcElement)也不需要。

+0

謝謝!這就是訣竅。 –