0

我想在鼠标移动时检测鼠标在保持器 div 中的位置。但是,当我将鼠标移到持有人 div 内的 SVG 元素上时,它将采用与此元素而不是持有人 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>
4

1 回答 1

2

您应该使用event.currentTarget而不是event.target- 这将为您提供将侦听器附加到的元素,而不是接收事件的元素。所以你的位置将相对于#holder元素计算。

由于您使用的是 jQuery,因此它也应该在 Internet Explorer 中工作(jQuery 显然 在那里模拟event.currentTarget)。其他 IE 兼容性黑客 (window.eventevent.srcElement) 也不应该是必需的。

于 2012-05-23T06:53:21.620 回答