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.eventおよびevent.srcElement)も必要ありません。

于 2012-05-23T06:53:21.620 に答える