Sie müssen die von Ihren Ereignishandlern zurückgegebenen Koordinaten event.clientX
und event.clientY
durch den Offset des Canvas-Elements im Vergleich zum Fenster anpassen. Um das zu tun, können Sie canvas.getBoundingClientRect
verwenden, um die left
& Canvas-Offsets zu erhalten. Achten Sie darauf, zu hören für resize
& scroll
Ereignisse. Wenn diese Ereignisse auftreten, müssen Sie den aktuellen Offset des Canvas erneut abrufen.
// Fetch offsetX & offsetY variables that contain the
// canvas offset versus the window
// Re-fetch when the window is resized or scrolled
function reOffset(){
var BB=canvas.getBoundingClientRect();
offsetX=BB.left;
offsetY=BB.top;
}
var offsetX,offsetY;
reOffset();
window.onscroll=function(e){ reOffset(); }
window.onresize=function(e){ reOffset(); }
Hier ist, wie die Offsets verwenden richtigen Mauskoordinaten in einem Event-Handler zu berechnen:
function handleMouseDown(e){
// tell the browser we're handling this event
e.preventDefault();
e.stopPropagation();
// calculate the mouse position
mouseX=parseInt(e.clientX-offsetX);
mouseY=parseInt(e.clientY-offsetY);
// your stuff
}
Warum sind Sie, dass Substraktion machen ??? die Leinwandgröße ist 350x350, deshalb ist die img 350x350 https://jsfiddle.net/6yLqa5hz/1/ unten rechts muss 350.350 sein – DaniP