COPIED FROM: http://simonsarris.com/blog/510-making-html5-canvas-useful
Получение координат мыши на Canvas
Получение хороших координат мыши немного сложно на Canvas.Вы можете использовать offsetX / Y и LayerX / Y, но LayerX / Y не рекомендуется использовать в веб-наборе (Chrome и Safari), а Firefox не имеет offsetX / Y.
Самый пуленепробиваемый способ получить правильную позицию мыши - этопоказано ниже.Вы должны идти вверх по дереву, складывая смещения вместе.Затем вы должны добавить любой отступ или границу к смещению.Наконец, чтобы исправить проблемы с координатами, когда у вас есть элементы с фиксированным положением на странице (например, админ-панель wordpress или панель stumbleupon), вы должны добавить значения offsetTop и offsetLeft.
Затем вы просто вычитаете это смещение иззначения e.pageX / Y, и вы получите идеальные координаты практически во всех возможных ситуациях.
// Creates an object with x and y defined,
// set to the mouse position relative to the state's canvas
// If you wanna be super-correct this can be tricky,
// we have to worry about padding and borders
CanvasState.prototype.getMouse = function(e) {
var element = this.canvas, offsetX = 0, offsetY = 0, mx, my;
// Compute the total offset
if (element.offsetParent !== undefined) {
do {
offsetX += element.offsetLeft;
offsetY += element.offsetTop;
} while ((element = element.offsetParent));
}
// Add padding and border style widths to offset
// Also add the <html> offsets in case there's a position:fixed bar
offsetX += this.stylePaddingLeft + this.styleBorderLeft + this.htmlLeft;
offsetY += this.stylePaddingTop + this.styleBorderTop + this.htmlTop;
mx = e.pageX - offsetX;
my = e.pageY - offsetY;
// We return a simple javascript object (a hash) with x and y defined
return {x: mx, y: my};
}