2017-05-08 12 views
0

私はHeroをキャンバスに持っています。どのように私はそれを選択し、コンテキストメニューを開きますか?キャンバスにヒーローを選択する方法を教えてください。

hero select hero

クラスイメージは、このメソッドが含まれていないbecuse私は、唯一のキャンバスにリスナーを追加します。

シンプルコード:

context.drawImage(hero, heroX, heroY); 
context.globalCompositeOperation = "destination-in"; 
context.drawImage(mask, heroX, heroY); 
context.globalCompositeOperation = "destination-over"; 

function getElementPosition(obj) { 
    var curleft = 0, 
     curtop = 0; 
    if (obj.offsetParent) { 
     do { 
      curleft += obj.offsetLeft; 
      curtop += obj.offsetTop; 
     } while (obj = obj.offsetParent); 
     return { 
      x: curleft, 
      y: curtop 
     }; 
    } 
    return undefined; 
} 

canvas.addEventListener('mousemove', function(evt) { 
    var mousePos = getMousePos(canvas, evt); 
    var message = 'Mouse position: ' + mousePos.x + ',' + mousePos.y; 
    var elementPos = getElementPosition(hero); //doesn't work 
    alert(elementPos.x); 
}, false); 

答えて

2

あなたが主人公の座標を格納し、MouseMoveのコールバックでそれらをチェックする必要があります。 offsetLeftoffsetTopはDOM要素で機能し、キャンバスに描画されたピクセルでは機能しません。

あなたが提供したコードからより正確な回答を得ることはできません。 heroXheroYのようなものを使うべきですが、何を見ていなくても、伝えるのは不可能です。

+0

複雑な判断です。 :) ImageクラスのaddEventListenerを追加できますか? – Anonymous

+1

キャンバスの上にイメージのDOM要素として使用する場合のみ(キャンバスに描画しないことを意味します)。それ以外の場合は、数学をする必要があります。 :) – Shomz

+0

"キャンバスの上にイメージ要素" - これはDOM要素を使用することですか?例、タグ ..を追加して使用してもよいですか? getElementById( 'newMyImage')。addEventListener?私は正しく理解していますか? :) – Anonymous