キャンバス自体に対するキャンバス要素のイベントの座標を取得する方法については、stackoverflowに関する多くの回答があります。私は、次のソリューションを使用しています(getEventPosition
)、それがうまく機能し、私は私のキャンバスに境界線を追加してから除く:ボーダー付きのHTML5キャンバス(クリック)イベントの座標を見つける
/**** This solution gives me an offset equal to the border size
**** when the canvas has a border. Example:
**** <canvas style='border: 10px solid black; background: #333;' id='gauge_canvas' width='500' height='500'></canvas>
****/
// Get DOM element position on page
this.getPosition = function(obj) {
var x = 0, y = 0;
if (obj.offsetParent) {
do {
x += obj.offsetLeft;
y += obj.offsetTop;
obj = obj.offsetParent;
} while (obj);
}
return {'x': x, 'y': y};
};
// Get mouse event position in DOM element (don't know how to use scale yet).
this.getEventPosition = function(e, obj, aux_e, scale) {
var evt, docX, docY, pos;
evt = (e ? e : window.event);
if (evt.pageX || evt.pageY) {
docX = evt.pageX;
docY = evt.pageY;
} else if (evt.clientX || evt.clientY) {
docX = evt.clientX + document.body.scrollLeft +
document.documentElement.scrollLeft;
docY = evt.clientY + document.body.scrollTop +
document.documentElement.scrollTop;
}
// This works on hammer.js
else if (typeof aux_e !== 'undefined') {
docX = aux_e.touches[0].x;
docY = aux_e.touches[0].y;
}
pos = this.getPosition(obj);
if (typeof scale === 'undefined') {
scale = 1;
}
return {'x': (docX - pos.x)/scale, 'y': (docY - pos.y)/scale};
};
このコードはマイライブラリに属し、どのようなキャンバス要素ユーザーを取ることができますので、ユーザーがライブラリに枠のついたキャンバスを渡すと、物が壊れます。アカウントに境界線を取るソリューションはありますか?
これは問題を解決するだけでなく、それが返すy座標にキャンバスの上にある2つのh1要素の高さを追加します:( – janesconference
@janesconference私は自分の答えを編集しました。テストするためにすべてのコードをjsfiddleで提供することができます。 – Oriol
編集されたソリューションには他の要素が含まれています。 – janesconference